github →

New request

#3260: Feature: self-hosted provider setup (Ollama / LM Studio) in Settings → Providers after onboarding

We'll provision a sandbox, run an agent against the issue, and open a draft PR. You can pull the branch and iterate from there.

Issue
enhancementsprint-candidate

Problem

Hermes Agent supports local Ollama/LM Studio (and other OpenAI-compatible servers), but after first-run onboarding the WebUI has no obvious way to add or reconfigure them.

Today:

  • Onboarding wizard supports Ollama, LM Studio, and Custom OpenAI-compatible under Open / self-hosted (api/onboarding.py::_SUPPORTED_PROVIDER_SETUPS, static/onboarding.js).
  • Settings → Providers only renders providers with API-key env vars (configurable = pid in _PROVIDER_ENV_VAR in api/providers.py).
  • Local Ollama is deliberately omitted from _PROVIDER_ENV_VAR because it is keyless by default (#1410 — avoids colliding with Ollama Cloud / OLLAMA_API_KEY).

Result for common installs:

  1. User completes onboarding with a cloud provider (or configures via hermes model / CLI and gets onboarding_completed: true).
  2. Wizard never shows again (static/boot.js: onboarding_completed ? Promise.resolve(false) : loadOnboardingWizard()).
  3. Settings → Providers shows API-key providers only — no Ollama card, no base URL editor, no probe/Test button.
  4. User assumes WebUI cannot connect to local Ollama, even though Hermes CLI can.

This is especially confusing for CLI-first users (Yandex/custom providers not in the onboarding catalog) who never saw the self-hosted wizard step.

Expected behavior

Post-onboarding, operators should be able to configure self-hosted inference from the WebUI without editing config.yaml or rerunning the full wizard.

Minimum viable UX (reuse existing backend):

  • Add a Self-hosted section in Settings → Providers for:
    • ollama (local)
    • lmstudio
    • custom OpenAI-compatible
  • Reuse existing onboarding primitives:
    • Base URL field + optional API key (respect key_optional)
    • POST /api/onboarding/probe (or a providers-scoped alias) to list models from <base_url>/models
    • Persist via the same config/env write path as onboarding (apply_onboarding_setup logic), without requiring onboarding_completed=false
  • After save: invalidate model cache + refresh model picker (same as provider key add/remove — see #1539 pattern)

Non-goals (for this request)

  • Replacing hermes model CLI
  • Changing Ollama Cloud env-var collision rules (#1410) — local Ollama should remain keyless-by-default
  • Docker host networking docs (already covered in docs/onboarding.md / docs/docker.md)

Acceptance criteria

  • With onboarding_completed: true, user can add/configure local Ollama from Settings → Providers
  • Base URL probe works and populates model choices (or free-text model for custom)
  • Saved config makes models appear in composer model picker without server restart
  • Existing release-channel onboarding flow unchanged
  • Regression tests for: configure local Ollama post-onboarding; Ollama Cloud card still independent of local Ollama (#1410)

References

  • Onboarding catalog: api/onboarding.py (ollama, lmstudio, custom)
  • Providers panel filter: static/panels.js::loadProvidersPanel() (configurable || is_oauth || is_custom)
  • Local Ollama omitted from env-var map: api/providers.py::_PROVIDER_ENV_VAR comment at ~653
  • Probe endpoint: POST /api/onboarding/probe (#1499)
  • Related broader parity issue: #1240

Reporter context

Observed on a local bootstrap install where Hermes Agent was configured via CLI (Yandex provider). WebUI worked, but there was no visible Ollama setup path after onboarding except resetting onboarding_completed or using the terminal.

Assessmentadvisory
feature●● medium90% confidence

Adds post-onboarding Settings UI for self-hosted providers, requiring provider metadata, base-URL editing, probe endpoints, and onboarding flow integration.

Likely files
  • api/providers.py
  • api/onboarding.py
  • api/routes.py
  • static/onboarding.js
  • static/boot.js
  • static/index.html
Create the request

This opens a fresh agent run and a draft PR for issue #3260.

Cancel