Show HN: Juggler – an open-source GUI coding agent, by the creator of JUCE
🤹 Juggler: A Visual, Open-Source GUI for AI Coding Agents
Created by the mind behind JUCE, Juggler isn't just another AI coding assistant—it's a specialized environment for developers who prefer a "hands-on" approach to how Large Language Models (LLMs) interact with their source code.
The Core Philosophy: Instead of treating the AI as a black box or a simple chat interface, Juggler provides a visual workbench where you can inspect tool calls, manage branching threads, and manually edit the context provided to the model.
🛠️ The Visual Experience: Beyond the Chatbox
Most AI agents force you into a linear transcript. Juggler throws away the linear chat replaces it with a conversation tree.
The Miller Column Interface
Juggler utilizes a Finder-style Miller column view. This allows for deep graphical navigation:
- Root Level: The main conversation starts on the left.
- Expansion: Selecting an item expands its properties and children to the right.
- Capabilities: You can drill down into specifics, backtrack through decisions, compare different paths, and edit raw context on the fly.
Visualizing the Workflow
The structure of a Juggler session can be represented as a directed tree , where each node represents a state of the conversation or a tool execution.
🔌 An Extensible Platform
Juggler is designed as a platform where almost every functional element is a JavaScript extension. This means you can inspect, fork, or entirely replace the following:
| Component | Description | Example |
|---|---|---|
| Context Items | Defines how an item talks to the LLM and looks in the UI. | read-file, bash, replace-text |
| Strategies | High-level orchestration loops for the LLM. | plan, research, or custom logic |
| Commands | Slash commands used to manipulate the session. | /clear, /compact |
If a specific AI workflow requires a unique UI or a specialized visualization, Juggler provides the framework to build it rather than relying on a headless Python script.
🏗️ Architecture & Connectivity
Juggler employs a multi-client architecture. While it looks like a standard desktop app, it is actually a local webserver hosting a collaborative session.
Supported LLMs
Juggler is compatible with a wide array of providers:
- Claude Code (API or CLI)
- OpenAI (API or Codex plan)
- Gemini
- Deepseek
- Ollama (Local)
- OpenRouter & Z.AI
Client Flexibility
Because the backend is a server, you can connect via:
- The Native Desktop App.
- Web Browser tabs (on the same or different machines).
🚀 Getting Started
Installation Checklist
- Download the latest build from juggler.studio or the GitHub Releases page.
- Install the bundled server and app.
- Configure your LLM API keys.
OS-Specific Setup
🍎 macOS
- Open the
.dmgand drag Juggler to yourApplicationsfolder. - Note on Security: If macOS Gatekeeper blocks the app,
Right-ClickOpenOpen, or navigate to System Settings Privacy & Security Open Anyway. - The server is bundled and starts automatically upon launch.
🐧 Linux
- Download the
jugglerserver binary. - Execute it via the terminal.
- Connect using the desktop app or a web browser.
🪟 Windows
The installer provides both the GUI app and the juggler.exe command-line server in a single directory, ensuring version parity. It can also add the binary to your system PATH.
🖥️ Server Management & Networking
To start a headless session, simply run:
juggler
This will output a connection URL and a QR code.
Network Access Levels
- Localhost (Default): Only the machine running the server can access it.
- LAN Access: Press
pin the terminal or use the--publicflag.- Warning: LAN access is unpassworded; only enable this on trusted networks.
- WAN Access: Not included in the open-source repository. Official binaries from
juggler.studioinclude proprietary WAN modes for internet-wide access (seeLICENSING.md).
🖼️ Gallery
The primary workbench view.
Managing and inspecting JS extensions.
A single session synced across multiple browser clients.
Optimized for wide-screen productivity.
Accessing your agent via a mobile browser.