hermes - 💡(How to fix) Fix Dashboard: profile-scoped config not visible in web UI

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

The Hermes Web Dashboard (hermes dashboard, port 9119) currently only reads the global config (~/.hermes/config.yaml). Profile-specific configurations (~/.hermes/profiles/<name>/config.yaml) are completely invisible, making it impossible to view or manage non-default profile settings through the web UI.

For users running multiple profiles with different providers/models (e.g. global=zai/glm-5.1, profile "bwl"=deepseek/deepseek-v4-flash), the Dashboard is misleading — it shows only the global config while the active agent session may be using a completely different profile.

Root Cause

The Hermes Web Dashboard (hermes dashboard, port 9119) currently only reads the global config (~/.hermes/config.yaml). Profile-specific configurations (~/.hermes/profiles/<name>/config.yaml) are completely invisible, making it impossible to view or manage non-default profile settings through the web UI.

For users running multiple profiles with different providers/models (e.g. global=zai/glm-5.1, profile "bwl"=deepseek/deepseek-v4-flash), the Dashboard is misleading — it shows only the global config while the active agent session may be using a completely different profile.

Code Example

{
  "config_path": "/Users/zhangyang/.hermes/config.yaml",
  "env_path": "/Users/zhangyang/.hermes/.env"
}

---

# web_server.py:884
cfg = load_config()
model_cfg = cfg.get("model", "")
RAW_BUFFERClick to expand / collapse

Description

The Hermes Web Dashboard (hermes dashboard, port 9119) currently only reads the global config (~/.hermes/config.yaml). Profile-specific configurations (~/.hermes/profiles/<name>/config.yaml) are completely invisible, making it impossible to view or manage non-default profile settings through the web UI.

For users running multiple profiles with different providers/models (e.g. global=zai/glm-5.1, profile "bwl"=deepseek/deepseek-v4-flash), the Dashboard is misleading — it shows only the global config while the active agent session may be using a completely different profile.

Evidence

The Dashboard's /api/status endpoint returns the global path only:

{
  "config_path": "/Users/zhangyang/.hermes/config.yaml",
  "env_path": "/Users/zhangyang/.hermes/.env"
}

The backend in web_server.py calls load_config() which reads get_hermes_home() / "config.yaml" (see hermes_cli/config.py:255-257). Profile-specific configs are never loaded.

The /api/model/info endpoint resolves from the global config only:

# web_server.py:884
cfg = load_config()
model_cfg = cfg.get("model", "")

Proposed Solution

Add a profile selector to the Dashboard UI and corresponding backend endpoints:

  • /api/profiles — list all profiles (reads ~/.hermes/profiles/)
  • /api/config?profile=bwl — load a specific profile's config
  • /api/config (no param) — default to global config (backward compatible)

The frontend adds a dropdown at the top of the Config page showing available profiles. Selecting a profile switches the displayed configuration to that profile's config.yaml and .env.

Implementation Notes

Key files to modify:

  • hermes_cli/web_server.py — add ?profile query param to /api/config and /api/config/raw endpoints; add /api/profiles listing endpoint
  • hermes_cli/config.pyload_config(profile_name=None) that falls back to global config
  • hermes_cli/web_dist/ — frontend profile selector component
  • The /api/config/raw PUT endpoint (line 2786) would also need profile-aware saving

Motivation

Multi-profile users (who use different models for different roles/costs) are the primary audience. The Dashboard is currently unusable for managing profile-scoped configuration, forcing users back to the CLI for any profile-level changes.

Alternatives Considered

  • Document that Dashboard is global-only (poor UX, users won't discover this)
  • Add hermes dashboard --profile bwl flag at startup (simpler but no runtime switching)

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

hermes - 💡(How to fix) Fix Dashboard: profile-scoped config not visible in web UI