Juggler — визуальный AI-агент для кодинга с древовидными сессиями
📂 Исходный код на GitHubВизуальный AI-кодинг-агент с workbench-интерфейсом. Древовидные сессии на Yjs, Miller-колонки для tool calls и контекста, JavaScript-расширения, мультиклиентская архитектура (десктоп + браузеры). Поддержка Claude, OpenAI, Gemini, Ollama, OpenRouter, Z.AI, Deepseek.
Juggler — ещё один AI-кодинг-агент, но с необычным подходом. Авторы честно признаются: «yes, it's another AI coding agent». Его отличие — визуальный workbench, где вы видите и контролируете всё, что LLM делает с вашей кодовой базой. Это не консольная утилита, а полноценное desktop-приложение с графической навигацией, инспекцией и управлением каждым шагом агента.
Сайт проекта: juggler.studio. Репозиторий: github.com/juggler-ai/juggler. На момент написания — 368 звёзд, AGPL-3.0, последняя версия v0.3.7.
Ключевая идея
Juggler создан для тех, кто хочет быть hands-on — активно следить за тем, что LLM делает с кодом. Вместо бесконечного чат-транскрипта агент показывает визуальный workbench:
- tool calls видны и проверяемы;
- ветвящиеся потоки (threads) — можно свернуть, отредактировать, сравнить;
- контекст редактируется напрямую.
Сессия — это дерево, а не история чата
Большинство агентов дают линейный транскрипт, который в лучшем случае можно перемотать назад. Juggler хранит сессию как дерево — это Yjs-документ, а не текст переписки.
- Любую точку можно разветвить в sub-thread.
- Sub-threads ветвятся дальше.
- Структуру можно навигровать, инспектировать и редактировать напрямую.
Интерфейс использует Miller columns — корень слева, выбранный элемент раскрывается в свойства и дочерние узлы справа. Если вы пользовались column view в macOS Finder, принцип уже знаком.
Всё важно — видно
В Juggler нет спрятанных за сворачиваемыми блоками данных. Tool calls, одобрения (approvals), структура потоков, свойства элементов (item properties), raw-контекст — всё это разложено в Finder-style Miller-колонках. Это сознательное архитектурное решение: видимая и проверяемая работа агента вместо «чёрного ящика».
Всё — это расширение
Ядро приложения управляет документом и оркестрацией. Почти все объекты, из которых состоит сессия, определены JavaScript-расширениями, которые можно инспектировать, форкать или заменять:
| Тип расширения | Что делает |
|---|---|
| Context items | Каждый тип элемента в разговоре (read-file, replace-text, bash, …) контролирует и то, как он общается с LLM, и то, как отображается в UI |
| Strategies | Высокоуровневые LLM-циклы вроде plan, research или собственные идеи — тоже плагины |
| Commands | Slash-команды вроде /clear и /compact — это плагины, манипулирующие документом сессии |
Не каждая LLM-задача обязана жить как headless Python-скрипт в терминале. Если идее оркестрации нужен собственный UI, элементы управления или визуализация — Juggler позиционируется как платформа для этого.
Мультиклиентская архитектура
Juggler выглядит как нативное desktop-приложение, но под капотом это локальный веб-сервер, раздающий live-сессию в реальном времени. Само приложение — лишь один клиент. Браузерная вкладка — другой клиент. Другая машина — третий.
Это значит, что сервер запускается там, где живёт код (локальная рабочая станция, dev-бокс, серверная ферма), а view подключаются откуда удобно. Desktop-приложение и браузерные вкладки остаются синхронизированы. Один и тот же сервер можно смотреть с большого монитора или с телефона в браузере.
Запуск и установка
Каждый дистрибутив содержит две части:
- Juggler app — нативное desktop-приложение.
juggler— headless CLI-сервер для долгоживущих, удалённых или сетевых сессий.
# headless-сессия: печатает URL и QR-код для подключения из браузера
juggler
По умолчанию сервер работает только на localhost. Чтобы разрешить подключения с других устройств в сети, нажмите p в терминале (или запустите с --public). LAN-доступ без пароля — включайте только в доверенных сетях.
Платформы:
- macOS —
.dmg, перетащить в Applications. При первом запуске Gatekeeper может заблокировать: правый клик → Open → Open. - Windows —
Juggler-<version>-setup.exe, ставит desktop-приложение иjuggler.exeвместе, с опцией добавить в PATH. - Linux — серверный бинарник, затем подключение через браузер или desktop-приложение. Для headless-серверов — docs/headless-linux.md.
Desktop-приложение и сервер всегда поставляются вместе — как единый блок, чтобы версии не разъезжались.
Доступ из-за пределов LAN не входит в этот репозиторий: сборка из исходников — только local + LAN. Официальные бинарники с juggler.studio дополнительно включают WAN-режимы (см. LICENSING.md).
Поддержка моделей
Juggler подключается к привычному зоопарку моделей:
- Claude Code (через CLI или API);
- OpenAI (codex plan или API);
- Gemini;
- Ollama;
- OpenRouter;
- Z.AI;
- Deepseek и др.
Добавить нового провайдера легко — приветствуются PR.
Сборка из исходников
Идея системы расширений в том, что большинству людей вообще не придётся собирать приложение. Если нужно — см. CONTRIBUTING.md. Короткая версия:
git clone --recurse-submodules https://github.com/juggler-ai/juggler.git
cd juggler && make build
Если репозиторий уже склонирован без --recurse-submodules, добрать подмодули:
git submodule update --init --recursive
Windows-бинарники кросс-компилируются с любого хоста через make build-windows; Linux-десктоп нужно собирать нативно.
Технологический стек
| Компонент | Технология |
|---|---|
| Бэкенд | Go |
| Windowing | Wails (не Electron) |
| UI | HTML/JS, отдаётся Go-бэкендом |
| Сессии | Yjs (хранение и синхронизация) |
| Расширения | JavaScript |
| Типизация | Type-checked JavaScript, типы в JSDoc, strict-линтинг в CI |
Фронтенд — это type-checked JavaScript, а не TypeScript: типы живут в JSDoc и проверяются в CI строгим статическим линтингом. Между исходниками и тем, что попадает в релиз, нет шага сборки (build step).
Лицензия
Код приложения — GNU AGPL v3.0 или новее. Extension SDK (web/sdk/) и bundled-расширения (web/extensions/) — под Apache-2.0, поэтому расширения (включая закрытые) можно писать без copyleft-обязательств. Полная карта лицензий — в LICENSING.md.
Для AGPL-частей: можно использовать, изменять и распространять свободно, но любая изменённая версия, которую вы распространяете или хостите как сервис, тоже должна выходить под AGPLv3. Для closed-source-сценариев автор предлагает обсудить коммерческую лицензию.
Кому подходит
Juggler стоит попробовать, если вы хотите больше контроля над тем, что LLM делает с кодом: видеть каждый tool call, ветвить эксперименты в sub-threads, редактировать контекст руками и подключать собственные стратегии и инструменты через JavaScript-расширения. Для тех, кому достаточно линейного чат-потока в терминале, он может оказаться избыточным.
Источник: https://github.com/juggler-ai/juggler