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.
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_VARinapi/providers.py). - Local Ollama is deliberately omitted from
_PROVIDER_ENV_VARbecause it is keyless by default (#1410 — avoids colliding with Ollama Cloud /OLLAMA_API_KEY).
Result for common installs:
- User completes onboarding with a cloud provider (or configures via
hermes model/ CLI and getsonboarding_completed: true). - Wizard never shows again (
static/boot.js:onboarding_completed ? Promise.resolve(false) : loadOnboardingWizard()). - Settings → Providers shows API-key providers only — no Ollama card, no base URL editor, no probe/Test button.
- 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)lmstudiocustomOpenAI-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_setuplogic), without requiringonboarding_completed=false
- Base URL field + optional API key (respect
- After save: invalidate model cache + refresh model picker (same as provider key add/remove — see #1539 pattern)
Non-goals (for this request)
- Replacing
hermes modelCLI - 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_VARcomment 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.
Adds post-onboarding Settings UI for self-hosted providers, requiring provider metadata, base-URL editing, probe endpoints, and onboarding flow integration.
- api/providers.py
- api/onboarding.py
- api/routes.py
- static/onboarding.js
- static/boot.js
- static/index.html