메뉴
HN
Hacker News 16일 전

Juggler: JUCE 개발자가 만든 오픈소스 GUI 코딩 에이전트

IMP
7/10
핵심 요약

오디오 프레임워크인 JUCE의 창시자가 LLM의 코드 작업 과정을 세밀하게 제어할 수 있는 오픈소스 GUI 코딩 에이전트 'Juggler'를 공개했습니다. 이 도구는 일반적인 선형적인 채팅 기록 대신, 대화를 편집 가능한 트리 구조로 관리하여 코드 수정 과정을 시각적으로 추적하고 제어할 수 있게 해줍니다.

번역된 본문

네, 또 다른 AI 코딩 에이전트입니다. 업계에 하나 더 필요했겠죠. Juggler만의 특징이 있다면, LLM이 코드베이스에 어떤 작업을 하는지 더 깊이 개입하고 통제하고 싶은 사람들을 위한 도구라는 점입니다. 시각적인 작업대인 inspectable tool calls(검사 가능한 도구 호출), branching threads(분기 스레드), editable context(편집 가능한 컨텍스트)를 제공합니다. 웹사이트(https://juggler.studio)에 더 자세한 내용이 있으며, 핵심 요약은 다음과 같습니다:

  • 진정한 GUI입니다. 이것은 콘솔 앱이 아닙니다. 그래픽 시각 탐색, 검사 및 제어에 중점을 둡니다.
  • 세션은 트리(Tree)입니다. 끝없이 스크롤해야 하는 채팅이 아닙니다. 단순한 텍스트 기록이 아닌 Yjs 문서 형태입니다. 하위 스레드를 만들고, 깊이 파고들고, 되돌아가고, 비교하고 편집할 수 있습니다.
  • 중요한 모든 것이 보입니다. 도구 호출, 승인, 스레드 구조, 항목 속성, 원시 컨텍스트가 접을 수 있는 채팅창에 묻혀 있지 않고, macOS Finder 스타일의 Miller 칼럼으로 펼쳐집니다.
  • 모든 것이 플러그인(Plugins)입니다. 컨텍스트 항목, 슬래시 명령어, LLM 루프 전략 및 해당 UI는 검사, 포크(fork) 또는 교체할 수 있는 JavaScript 확장 프로그램입니다.
  • 로컬, 원격 또는 두 가지 모두에서 동시에 실행됩니다. 네이티브 데스크톱 앱이나 브라우저에서 동일한 세션과 UI를 사용할 수 있습니다. 여러 클라이언트를 동일한 세션에 연결할 수 있습니다.
  • 다양한 모델을 지원합니다. Claude Code (CLI 또는 API), OpenAI (Codex Plan 또는 API), Gemini, Ollama, OpenRouter, Z.AI, Deepseek 등을 사용할 수 있습니다.

시작하기 Releases 페이지나 juggler.studio에서 빌드를 다운로드하십시오. 각 다운로드 파일은 두 가지 주요 구성 요소를 포함합니다:

  1. Juggler 앱: 기대하는 대로 작동하는 네이티브 데스크톱 앱입니다.
  2. juggler: 헤드리스 명령줄 서버입니다. 오래 지속되거나 원격, 네트워크 접근이 필요한 세션을 위해 터미널에서 실행합니다. 자체 창은 없지만 터미널에 w를 입력하면 데스크톱 앱이 열리고, 출력된 브라우저 URL을 사용할 수도 있습니다.

데스크톱 앱과 브라우저 탭(로컬 또는 원격 머신)은 모두 동일한 서버 세션을 보는 클라이언트가 될 수 있습니다.

설치 방법

  • macOS: .dmg 파일을 다운로드하고, 열어서 Juggler를 응용 프로그램(Applications) 폴더로 드래그한 다음 실행합니다. 앱과 서버는 함께 번들로 제공되므로 서버가 자동으로 시작됩니다. 처음 열 때 macOS 보안(Gatekeeper)이 차단할 수 있습니다. 앱을 우클릭(또는 Control 클릭) → 열기 → 열기를 선택하거나, 시스템 설정 → 개인정보 및 보안 → 그래도 열기를 선택하십시오.
  • Windows: Juggler--setup.exe를 다운로드하고 실행합니다. 데스크톱 앱과 일치하는 juggler.exe 명령줄 서버를 한 디렉터리에 함께 설치하며(필요 시 juggler를 환경 변수 PATH에 추가), 두 구성 요소의 버전이 어긋나지 않도록 합니다.
  • Linux: juggler 서버 바이너리를 다운로드하고 터미널에서 실행한 뒤, 브라우저나 데스크톱 앱으로 연결합니다.

서버 직접 실행하기 헤드리스 세션의 경우 터미널에 juggler를 입력하여 실행하기만 하면 됩니다. 이 명령은 브라우저에서 연결하는 데 필요한 모든 정보를 출력합니다. 기본적으로 서버는 웹 UI를 열고 쉽게 연결할 수 있도록 URL과 QR 코드를 출력합니다. 서버는 기본적으로 로컬 호스트 전용이므로 외부 머신에서 접근할 수 없습니다. 네트워크의 다른 기기가 연결하게 하려면 터미널에서 p를 누르거나(또는 --public 옵션으로 실행) 하십시오. LAN 접속에는 비밀번호가 없으므로, 해당 주소에 접근할 수 있는 누구나 에이전트를 제어할 수 있습니다. 따라서 신뢰할 수 있는 네트워크에서만 이 기능을 활성화하십시오. 인터넷을 통한 외부 WAN 접속 기능은 이 오픈소스 저장소에 포함되어 있지 않습니다. 이 소스에서 빌드한 버전은 로컬 및 LAN 전용입니다. 반면 juggler.studio의 공식 Juggler 바이너리에는 인터넷을 통해 서버에 접속할 수 있는 WAN 액세스 모드가 추가로 포함되어 있습니다.

무엇이 다른가요? 당신의 대화는 단순한 채팅 기록이 아닌 편집 가능한 트리(Tree)입니다. 대부분의 에이전트는 일방적인 선형 텍스트 기록을 제공하며, 운이 좋으면 되감기를 할 수 있는 정도입니다. 하지만 Juggler는 트리를 제공합니다. 모든 지점에서 하위 스레드로 분기할 수 있으며, 하위 스레드는 다시 분기할 수 있습니다. 구조를 직접 탐색하고, 검사하고, 편집할 수 있습니다. UI는 Miller 칼럼을 사용합니다: 왼쪽에 루트가 있고, 선택한 항목이 오른쪽으로 속성 및 하위 항목으로 확장됩니다. (macOS Finder의 열 보기를 사용해 보셨다면 이해하기 쉬울 것입니다.)

원문 보기
원문 보기 (영어)
Juggler Yes, it's another AI coding agent. The industry definitely needed one more. If Juggler has an angle, it's that it's for people who want to be more hands-on over what the LLM is doing to their codebase. It gives you a visual workbench: inspectable tool calls, branching threads, editable context. More blurb on the website: https://juggler.studio And here's the TL;DR: It is a proper GUI. This is not a console app. It's all about graphical visual navigation, inspection, and control. The session is a tree, not a doom-scroll. It's a Yjs document, not a transcript. Create sub-threads, drill down, backtrack, compare, and edit. Everything important is visible. Tool calls, approvals, thread structure, item properties, raw context — laid out in Finder-style Miller columns instead of buried in collapsible chat. It's plugins all the way down. Context items, slash commands, LLM loop strategies, and their UIs are JavaScript extensions you can inspect, fork, or replace. It runs locally, remotely, or both at once. Use the same session with the same UI in the native desktop app, and/or browsers. Multiple clients can attach to the same session. It talks to the usual model zoo. Claude Code (via CLI or API), OpenAI (codex plan or API), Gemini, Ollama, OpenRouter, Z.AI, Deepseek, etc. Getting started Download a build from the Releases page or via juggler.studio . Each download contains the same two moving parts: Juggler app — the native desktop app. Works like you'd expect it to. juggler — the headless command-line server. Run this from a terminal for long-lived, remote, or network-accessible sessions. It has no window of its own, but you can type w into its terminal to open the desktop app, or use the browser URL it prints. The desktop app, browser tabs (on local or remote machines) can all be clients viewing the same server session. Installing macOS — download the .dmg , open it, and drag Juggler to Applications, then launch it. The app and its server are bundled together, so the server starts automatically. The first time you open it, macOS Gatekeeper may block the download: right-click (or Control-click) the app → Open → Open , or go to System Settings → Privacy & Security → Open Anyway . After the first launch it opens normally. Windows — download Juggler-<version>-setup.exe and run it. It installs the desktop app and the matching juggler.exe command-line server together in one directory (and can add juggler to your PATH), so the two never drift apart. Linux — download the juggler server binary and run it from a terminal, then connect with a browser or the desktop app. The desktop app and the server always ship and install as one unit — see docs/distribution.md . Running the server directly For a headless session, just run: juggler # prints everything you need to connect from a browser By default, the server opens a web UI and prints its URL plus a QR code for easy connection. The server is localhost-only by default — nothing off your machine can reach it. To let other devices on your network connect, press p in the terminal (or launch with --public ). LAN access has no password: anyone who can reach the address can drive the agent, so only enable it on networks you trust. Access from beyond your LAN isn't built into this repository: a build from this source is local + LAN only. The official Juggler binaries from juggler.studio additionally include WAN access modes for reaching your server across the internet (see LICENSING.md on components not in this repo). What makes it different? Your conversation is an editable tree, not a chat history Most agents give you a single linear transcript and if you're lucky you can rewind it. Juggler gives you a tree . Any point can branch into a sub-thread. Sub-threads can branch again. You can navigate, inspect, and edit the structure directly. The UI uses Miller columns : root on the left, selected items expanding into properties and children to the right. (If you've used Finder's column view, you already understand the basic move). Everything is an extension The core app manages the document and orchestration. Almost all the objects that make up the document are defined by JavaScript extensions: Context items — every item type in a conversation ( read-file , replace-text , bash , …) controls both how it talks to the LLM and how it appears in the UI. Strategies — high-level LLM loops such as plan , research , or your own fever-dream inventions are plugins too. Commands — slash commands like /clear and /compact are all just plugins that manipulate the session document. Not every LLM workflow wants to live as a headless Python script skulking in a terminal. If an orchestration idea needs its own UI, controls, or visualisation, Juggler is a platform for that. A desktop app with a multi-client architecture Juggler looks like a native desktop app, but underneath it is a local webserver serving a live collaborative session. The app is just one client. A browser tab can be another. A different machine can be another. That means you can run the server where the code lives — local workstation, dev box, server farm - and attach views from wherever is convenient. Model support Juggler connects to the usual suspects: Claude Code (via CLI or API), OpenAI (codex plan or API), Gemini, Ollama, OpenRouter, Z.AI, Deepseek, etc. It's easy to add more providers, so if yours is missing, ask your friendly neighbourhood LLM to add it as a PR. Building from source The idea with the extensions system is that most people won't need to actually build the app. If you do, see CONTRIBUTING.md for the full setup. The short version: git clone --recurse-submodules https://github.com/juggler-ai/juggler.git cd juggler && make build If you already cloned without --recurse-submodules , fetch them with: git submodule update --init --recursive Windows binaries cross-compile from any host with make build-windows ; the Linux desktop app must be built natively. Tech stack Juggler is a simple native app without baggage. The backend is Go, using Wails for windowing. The UI is HTML/JS served by the Go backend. Session documents are stored and synchronised with Yjs. Extensions are JavaScript. It doesn't use electron. The frontend is type-checked JavaScript rather than TypeScript: types live in JSDoc and are enforced in CI with strict static linting. There's no build step between source and what ships. Contributing See CONTRIBUTING.md for setup, test commands, and project conventions. For security issues, please use the private channel described in SECURITY.md rather than the public issue tracker. License Juggler's application code is licensed under the GNU Affero General Public License v3.0 or later . The extension SDK ( web/sdk/ ) and the bundled extensions ( web/extensions/ ) are licensed under Apache-2.0 , so you can build extensions — including closed-source ones — with no copyleft obligation. See LICENSING.md for the full map. For the AGPL parts you're free to use, modify, and redistribute — but any modified version you distribute or host as a service must also be released under the AGPLv3. If you want to do something closed-source with it, contact me to discuss commercial licensing.