diff --git a/hermes_cli/model_switch.py b/hermes_cli/model_switch.py index dcdd81df4a7..b6cf63442a3 100644 --- a/hermes_cli/model_switch.py +++ b/hermes_cli/model_switch.py @@ -889,10 +889,9 @@ def switch_model( # "ollama-launch" that resolve_runtime_provider doesn't know), keep existing # credentials. Otherwise use the resolved values (picks up credential rotation, # base_url adjustments for OpenCode, etc.). - if runtime.get("provider") != "custom": - api_key = runtime.get("api_key", "") - base_url = runtime.get("base_url", "") - api_mode = runtime.get("api_mode", "") + api_key = runtime.get("api_key", "") + base_url = runtime.get("base_url", "") + api_mode = runtime.get("api_mode", "") except Exception: pass diff --git a/hermes_cli/runtime_provider.py b/hermes_cli/runtime_provider.py index 68c59509f71..fe996d1e399 100644 --- a/hermes_cli/runtime_provider.py +++ b/hermes_cli/runtime_provider.py @@ -492,6 +492,13 @@ def _resolve_named_custom_runtime( requested_norm = (requested_provider or "").strip().lower() if requested_norm == "custom" and explicit_base_url: base_url = explicit_base_url.strip().rstrip("/") + # Check credential pool first — mirrors the named-custom-provider path + # so bare `provider: custom` with a configured custom_providers entry + # also gets its api_key from the pool instead of env var fallbacks. + pool_result = _try_resolve_from_custom_pool(base_url, "custom", None) + if pool_result: + pool_result["source"] = "direct-alias" + return pool_result api_key_candidates = [ (explicit_api_key or "").strip(), os.getenv("OPENAI_API_KEY", "").strip(),