hermes - 💡(How to fix) Fix [Bug]: Skins not fully loading in TUI

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…

Error Message

@classmethod def get_thinking_verbs(cls) -> list: try: skin = _get_skin() # returns default skin, not lunabot if skin: verbs = skin.spinner.get("thinking_verbs", []) # [] for default skin if verbs: return verbs except Exception: pass return cls.THINKING_VERBS # falls back to hardcoded list

Root Cause

The active skin is default, not lunabot. The skin engine is never initialized with the config value display.skin: lunabot during gateway/agent sessions.

Code Example

Not sharing due to privacy

---



---

$ python3 -c "from hermes_cli.skin_engine import get_active_skin; print(get_active_skin().name)"
# Output: default (not lunabot)

$ python3 -c "from hermes_cli.skin_engine import load_skin; s = load_skin('lunabot'); print(s.spinner.get('thinking_verbs', []))"
# Output: ['purring through the logic', 'kneading the problem', ...]  # loads fine explicitly

---

from hermes_cli.skin_engine import init_skin_from_config
init_skin_from_config(CLI_CONFIG)

---

@classmethod
def get_thinking_verbs(cls) -> list:
    try:
        skin = _get_skin()  # returns default skin, not lunabot
        if skin:
            verbs = skin.spinner.get("thinking_verbs", [])  # [] for default skin
            if verbs:
                return verbs
    except Exception:
        pass
    return cls.THINKING_VERBS  # falls back to hardcoded list
RAW_BUFFERClick to expand / collapse

Bug Description

Skins seems to only be partially loading. I have a custom skin and the ASCII art loads but the thinking verbs and faces fall back to the default.

Steps to Reproduce

  1. Add a custom skin with thinking_verbs
  2. Set the custom skin
  3. Load the TUI and send a message

Expected Behavior

Thinking verbs and faces from the skin get used

Actual Behavior

The default thinking verbs and faces get used.

Affected Component

CLI (interactive chat)

Messaging Platform (if gateway-related)

N/A (CLI only)

Debug Report

Not sharing due to privacy

Operating System

latest docker image

Python Version

No response

Hermes Version

0.15.2

Additional Logs / Traceback (optional)

Root Cause Analysis (optional)

LunaBot Skin: thinking_verbs Not Being Used

Symptom

The lunabot skin has thinking_verbs defined in skins/lunabot.yaml (line 47-63), but the spinner shows generic verbs like "pondering", "contemplating", "musing" instead of cat-themed ones like "purring through the logic", "kneading the problem", etc.

Root Cause

The active skin is default, not lunabot. The skin engine is never initialized with the config value display.skin: lunabot during gateway/agent sessions.

Evidence

$ python3 -c "from hermes_cli.skin_engine import get_active_skin; print(get_active_skin().name)"
# Output: default (not lunabot)

$ python3 -c "from hermes_cli.skin_engine import load_skin; s = load_skin('lunabot'); print(s.spinner.get('thinking_verbs', []))"
# Output: ['purring through the logic', 'kneading the problem', ...]  # loads fine explicitly

The lunabot.yaml file exists and is valid at /opt/data/skins/lunabot.yaml.

Code Flow

CLI path (works)

cli.py:702-703:

from hermes_cli.skin_engine import init_skin_from_config
init_skin_from_config(CLI_CONFIG)

This reads display.skin: lunabot from config.yaml and calls set_active_skin("lunabot").

Gateway/Agent path (broken)

No equivalent initialization. _active_skin_name stays as "default".

Spinner verb resolution

agent/display.py:618-628:

@classmethod
def get_thinking_verbs(cls) -> list:
    try:
        skin = _get_skin()  # returns default skin, not lunabot
        if skin:
            verbs = skin.spinner.get("thinking_verbs", [])  # [] for default skin
            if verbs:
                return verbs
    except Exception:
        pass
    return cls.THINKING_VERBS  # falls back to hardcoded list

The default skin has spinner: {} (empty), so thinking_verbs is [], triggering the fallback.

Proposed Fix (optional)

Fix Options

  1. Gateway startup: Add init_skin_from_config(config) to the gateway/agent startup path, similar to cli.py:702-703.

  2. Lazy init in skin_engine: In get_active_skin(), if _active_skin is None and _active_skin_name is still "default", auto-resolve from config.yaml.

  3. Explicit set: Call set_active_skin("lunabot") wherever the agent session initializes.

Files Involved

  • /opt/data/config.yaml — line 285: display.skin: lunabot
  • /opt/data/skins/lunabot.yaml — valid skin file with thinking_verbs
  • /opt/hermes/cli.py:702-703 — CLI init (works)
  • /opt/hermes/hermes_cli/skin_engine.py — skin loading logic
  • /opt/hermes/agent/display.py:618-628 — KawaiiSpinner.get_thinking_verbs()
  • /opt/hermes/agent/conversation_loop.py:1115 — where verbs are selected

Are you willing to submit a PR for this?

  • I'd like to fix this myself and submit a PR

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 [Bug]: Skins not fully loading in TUI