Features

Sessions

Sidebar: new session, live-filtering search, rename, delete - resizable (drag its right edge, 200-480px) and collapsible, both remembered across reloads. The active session gets a left-edge accent "sidemark", same treatment as the selected server row.

Sessions persist server-side (one JSON file each) - full history, response stats, and reasoning/thinking text all replay exactly as before. Which session is active is also remembered across a page reload (localStorage), so refreshing the page doesn't drop you back to "no session selected".

Chat

Model tuning sidebar ("Parameters")

Collapsible sidebar mirroring Open WebUI's per-chat Advanced Params: Temperature, Top K, Top P, Min P, Frequency/Presence Penalty, Repeat Penalty, Repeat Last N, Mirostat (+ Tau/Eta), Seed, Max Tokens, Stop Sequences. Per-field enable checkboxes - only checked fields are sent, unchecked ones fall back to server/global defaults. Values persist per session, independent of global settings.

Server discovery & selection

Auto-discovers every LlamaNexus serve instance on the LAN via UDP heartbeat (discoveryPort setting, default 50050) - shown as a clickable list in the sidebar. Forced per-chat server selection: every session, old and new alike, stays gated (composer disabled) until a server is explicitly picked for it - never auto-selected, even with only one candidate. The row matching the configured proxy also gets RPC mode/roster controls (single-node ↔ RPC toggle, add/remove workers) and a 🤖 icon to set that server as the session's independent agent server for run_agent.

Model tools (function calling)

All file paths confined to the configured workspaceRoot; a literal-text tool-call fallback (for models that don't emit structured calls) is caught and gated identically to real calls. Loop protection: stops a tool-calling chain after the same call repeats N times in a row, or after a max chained-call depth as a backstop.

Confirmations

In-app dialog (not a native browser popup) for every action that asks permission: file writes/patches, bash commands, ejecting/removing a model, removing an RPC worker, plan approval, deleting a chat, disruptive proxy-restarting actions. Escape denies/cancels; clicking elsewhere does not dismiss the dialog.

Search/download modal reachable from Settings or a "Search Hugging Face for models..." entry at the bottom of the composer's model picker. Search/listing calls go server-side so a private/gated repo can be searched with an HF_TOKEN env var the backend never exposes to the client. Collapsed-by-default repo list; expand to load quant files (cached). Shard-split quants shown as one combined-size entry. A "✓ Downloaded" badge marks quants already present; the download button doubles as a cancel button once a download starts.

Model picker & removal

The composer's model picker always sets a real model on pick and writes that pick through to Settings' "Model" field too. An Eject button unloads the currently-loaded model, freeing memory. Settings' model list shows each model's real context size and trained context, plus a red ✕ button to permanently remove a downloaded model (requires LlamaNexus 0.1.21+).

Slash commands

Companion VS Code extension

A separate VS Code extension provides the same core chat experience directly inside the editor, no browser tab needed. Most features here were built to match it feature-for-feature.