juggler-ai/juggler

The Juggler Code Agent

What it solves

Juggler addresses the "doom-scroll" nature of traditional AI coding agents, where conversations are linear transcripts that are difficult to navigate, edit, or resume. It provides a visual workbench for developers who want more hands-on control over how an LLM interacts with their codebase, moving away from simple chat interfaces toward a structured, inspectable environment.

How it works

Juggler operates as a client-server architecture where a Go-based backend manages a stateful session document (using Yjs) and a frontend provides a graphical user interface. Instead of a linear chat, sessions are organized as a tree of branching threads. The UI utilizes Miller columns (similar to macOS Finder) to allow users to drill down into tool calls, item properties, and nested sub-threads. The system is highly modular, using JavaScript extensions to define context items, LLM loop strategies, and slash commands.

Who it’s for

It is designed for developers who prefer a visual, non-linear way to manage AI coding sessions and those who need their agent's state (including pending approvals) to persist across app restarts or across different devices (desktop and browser).

Highlights

  • Tree-based Conversations: Supports branching threads and sub-threads rather than a linear history, allowing for easier backtracking and comparison.
  • Persistent State: Sessions are stored as documents on disk, meaning the agent's exact state—including waiting for user approval—is preserved after closing the app.
  • Miller Column UI: A Finder-style navigation system for fast inspection of tool calls, raw context, and thread structures.
  • Extensible Architecture: Context items, loop strategies, and commands are all JavaScript plugins that can be inspected or replaced.
  • Multi-Client Sync: A single server session can be accessed simultaneously via a native desktop app and multiple browser tabs.