Skip to content

Junie

Junie is JetBrains' coding agent, available both inside JetBrains IDEs and as a standalone CLI. With Lemonade, you can run the Junie CLI against local models through Lemonade's OpenAI-compatible API.

This guide focuses on the most common launch flows.

Prerequisites

  1. Install the Junie CLI.

    macOS and Linux:

    curl -fsSL https://junie.jetbrains.com/install.sh | bash
    

    Windows:

    powershell -NoProfile -ExecutionPolicy Bypass -Command "iex (irm 'https://junie.jetbrains.com/install.ps1')"
    

    Both installers put a junie launcher in ~/.local/bin. See the Junie CLI docs for details.

  2. Make sure Lemonade Server is running (lemond).

Launch Junie with Lemonade

Use:

lemonade launch junie [options]

Lemonade automatically writes a custom model profile at ~/.junie/models/lemonade.json pointing Junie at your local server, and starts Junie with --model custom:lemonade. If JUNIE_HOME is set, the profile is written under that directory instead.

A custom model profile is one of Junie's supported ways to authenticate, so no JetBrains account or subscription is required for this flow.

Use Case 1: First-time user (discover + import + launch)

If you are not sure which model to use yet, start with:

lemonade launch junie

You will get an interactive menu where you can:

  • Select a recipe to import and launch.
  • Browse downloaded models.
  • Browse recommended llama.cpp models (download may be required), then launch.

All remote recipes in this flow are sourced from: https://github.com/lemonade-sdk/recipes

Use Case 2: You already know the model

If you already downloaded a model or already imported the recipe, skip the interactive flow:

lemonade launch junie -m Qwen3.5-35B-A3B-GGUF

Equivalent long form:

lemonade launch junie --model Qwen3.5-35B-A3B-GGUF

When --model is provided, launch goes straight to starting the agent and loading that model.

Passing Junie arguments with --agent-args

You can pass any extra Junie CLI flags through Lemonade:

lemonade launch junie --model Qwen3.5-35B-A3B-GGUF --agent-args "--brave"

If Junie supports a flag, you can pass it through --agent-args.

How it works

Junie discovers custom model profiles from ~/.junie/models/*.json, where each file is one profile and the file name is the profile ID. lemonade launch junie writes a single file:

~/.junie/models/lemonade.json:

{
  "id": "Qwen3.5-35B-A3B-GGUF",
  "displayName": "Qwen3.5-35B-A3B-GGUF (Lemonade)",
  "providerName": "Lemonade",
  "baseUrl": "http://localhost:13305/v1/chat/completions",
  "apiType": "OpenAICompletion",
  "maxContextLength": 40960,
  "apiKey": "lemonade"
}

maxContextLength comes from the model's configured ctx_size; change it with lemonade load <model> --ctx-size N --save-options.

Lemonade rewrites this file on every launch, so hand edits to it are lost. Profiles in other files, such as ~/.junie/models/my-model.json, are left untouched.

Switching models

The lemonade profile always carries the model you launched with, so switch models by relaunching:

lemonade launch junie --model Gemma-4-E2B-it-GGUF

For more launch examples and full option details, see: docs/guide/cli.md

For Junie product details, see the official docs: https://junie.jetbrains.com/docs/