- 31 new managed skills (anubis/arr/authentik/hermes/freetoken/podman/llm-swap runbooks etc.) now tracked. - Removed superseded skills: omp_harness_config, peon_ping_integration (replaced by user-authored peon-ping-* managed skills), rocmfp4-strix-benchmark-orchestration. - New memory-root skills: niri_compositor_ops, omp_git_workflow, omp_model_config, quadlet-media-migration, homelab-service-triage, hermes-dankclaw-ops, frank-default-large-ops, caddy-auth-dns-playbook.
2.1 KiB
2.1 KiB
name, description
| name | description |
|---|---|
| hermes-config-home-drift | Diagnose Hermes webui/agent model-connection failures caused by HERMES_HOME config-home drift (image VOLUME anonymous volumes resetting on recreation) — verify which home each runtime reads, resolve provider→endpoint with the app's own resolver code, then probe the endpoint. |
Hermes config-home drift diagnosis
Symptom: hermes-webui/agent "cannot connect" to models even though the model endpoints answer curl.
- Find the real config home per runtime.
podman exec <container> printenv HERMES_HOMEfor each hermes container. If webui reads/opt/data(image default) while the gateway reads/data, the webui runs the image-default template config (provider: auto→ openrouter.ai with no key = connect failure). - Know the recreation trap. Image
VOLUMEpoints get a fresh anonymous volume on every container recreation (podman run --replace --rm) — edits inside such a mount are lost on restart/redeploy. Compare volume ids before/after a restart to confirm. - Fix: pin
Environment=HERMES_HOME=/datain the quadlet unit (shared state root), deploy via service-scoped deployer, restart. - Verify with the app's own code, not guesses:
from api import config as C; C.resolve_model_provider("<model-id>")→ returns(model_id, provider, base_url); bare ids map to owning provider by scanning theproviders:dict models allow-list;@provider:modelsyntax forces an explicit provider.hermes_cli.providers.resolve_user_provider(name, cfg["providers"])→ ProviderDef with realbase_url; acceptsapi/url/base_urlkeys on named provider entries.
- Probe the endpoint with the exact served model id (FLM/NPU endpoints route only by exact registry tag and answer HTTP 200 with
{"error":"Failed to load <tag> model!"}for unknown tags — status-code checks miss this).
Key gotcha: named providers (providers: dict) are a catalog + connection source; custom:<slug> connections resolve only via custom_providers[] entries. If neither holds an entry for the provider name, the request has no endpoint and fails to connect.