Settings

The Settings panel (⚙ in the app) exposes four groups; the same fields are readable/writable via GET/PUT /api/settings. Full shape: shared/src/settings.ts.

Group Settings
Connection llamaNexusBaseUrl, apiPath (default /openai/v1), serverHeartbeatTimeoutSeconds, discoveryPort (UDP, default 50050 - restart required), workspaceRoot, bindHost (see Security), port
Model & Generation defaultModel, defaultTemperature, defaultMaxTokens, systemPrompt, requestTimeoutSeconds, loadModelTimeoutSeconds, contextSize, autoCompactThreshold, autoCompactKeepMessages - plus the live model list (context size, loaded status, eject/remove buttons) and the Hugging Face search modal
Tool Calling enableFileTools, enableBashTool, enablePlanningTool, enableAgentTool, maxAgentSteps, maxToolCallRepeats, maxToolChainDepth
Chat Appearance timestampFormat, chatFontSize, chatCodeFontSize, chatMetaFontSize, uiFontSize

Per-session sampling overrides (temperature, top_k/top_p, penalties, mirostat, stop sequences, ...) live in the chat view's "Tuning" sidebar instead - see shared/src/chat.ts's SessionParams; a session's own value always wins over the Model & Generation defaults above.

lastUsedModel is readable via GET /api/settings but backend-managed only (not in the PUT whitelist, not shown in the Settings UI) - it tracks whichever model most recently generated a reply and seeds the model for every newly created session.

Hugging Face gated repos (HF_TOKEN)

The Settings panel's "Add model from Hugging Face" search/download is proxied through the backend (not called directly from the browser), so a private/gated HF repo can be searched by setting HF_TOKEN in the environment the backend runs in - e.g. a backend/.env file (loaded automatically via dotenv):

HF_TOKEN=hf_...

Never put this in settings.json - it's excluded from Settings on purpose, since GET /api/settings returns the whole object straight to the browser.