{"repo":"NousResearch/hermes-agent","public_id":"572","display_label":"Hermes doctor handling of OPENAI_BASE_URL custom endpoints","summary":"One issue reports OPENAI_API_KEY not being recognized with a localhost OPENAI_BASE_URL, and two pull requests propose changes to the doctor command to detect custom OpenAI endpoint environment settings and check connectivity. The titles suggest a shared theme, but the cluster does not show whether the changes address the reported problem.","subsystem":"hermes_cli","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":573,"merged_at":"2026-03-08T00:18:36+00:00"},"resolution":{"state":"resolved","by":"pr-573"},"freshness":{"state":"stale","last_verified_at":"2026-03-08T00:18:36+00:00","is_stale":true},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":572,"pr_number":573,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-03-08T00:18:36+00:00"}],"members":[{"kind":"issue","number":572,"title":"[Bug]: OPENAI_API_KEY set but not being recognized by hermes(not connecting at all) or hermes doctor with OPENAI_BASE_URL localhost","url":null,"state":"closed"},{"kind":"pr","number":573,"title":"fix(doctor): detect OpenAI custom endpoint env settings","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["hermes_cli/doctor.py","tests/hermes_cli/test_doctor.py"],"fix_hunks":[{"file":"hermes_cli/doctor.py","hunks":["@@ -33,6 +33,26 @@\n from hermes_cli.colors import Colors, color\n from hermes_constants import OPENROUTER_MODELS_URL\n \n+\n+_PROVIDER_ENV_HINTS = (\n+    \"OPENROUTER_API_KEY\",\n+    \"OPENAI_API_KEY\",\n+    \"ANTHROPIC_API_KEY\",\n+    \"OPENAI_BASE_URL\",\n+    \"GLM_API_KEY\",\n+    \"ZAI_API_KEY\",\n+    \"Z_AI_API_KEY\",\n+    \"KIMI_API_KEY\",\n+    \"MINIMAX_API_KEY\",\n+    \"MINIMAX_CN_API_KEY\",\n+)\n+\n+\n+def _has_provider_env_config(content: str) -> bool:\n+    \"\"\"Return True when ~/.hermes/.env contains provider auth/base URL settings.\"\"\"\n+    return any(key in content for key in _PROVIDER_ENV_HINTS)\n+\n+\n def check_ok(text: str, detail: str = \"\"):\n     print(f\"  {color('✓', Colors.GREEN)} {text}\" + (f\" {color(detail, Colors.DIM)}\" if detail else \"\"))\n ","@@ -132,12 +152,8 @@ def run_doctor(args):\n         \n         # Check for common issues\n         content = env_path.read_text()\n-        if any(k in content for k in (\n-            \"OPENROUTER_API_KEY\", \"ANTHROPIC_API_KEY\",\n-            \"GLM_API_KEY\", \"ZAI_API_KEY\", \"Z_AI_API_KEY\",\n-            \"KIMI_API_KEY\", \"MINIMAX_API_KEY\", \"MINIMAX_CN_API_KEY\",\n-        )):\n-            check_ok(\"API key configured\")\n+        if _has_provider_env_config(content):\n+            check_ok(\"API key or custom endpoint configured\")\n         else:\n             check_warn(\"No API key found in ~/.hermes/.env\")\n             issues.append(\"Run 'hermes setup' to configure API keys\")"]},{"file":"tests/hermes_cli/test_doctor.py","hunks":["@@ -0,0 +1,17 @@\n+\"\"\"Tests for hermes doctor helpers.\"\"\"\n+\n+from hermes_cli.doctor import _has_provider_env_config\n+\n+\n+class TestProviderEnvDetection:\n+    def test_detects_openai_api_key(self):\n+        content = \"OPENAI_BASE_URL=http://localhost:1234/v1\\nOPENAI_API_KEY=[redacted:secret-assignment]\"\n+        assert _has_provider_env_config(content)\n+\n+    def test_detects_custom_endpoint_without_openrouter_key(self):\n+        content = \"OPENAI_BASE_URL=http://localhost:8080/v1\\n\"\n+        assert _has_provider_env_config(content)\n+\n+    def test_returns_false_when_no_provider_settings(self):\n+        content = \"TERMINAL_ENV=local\\n\"\n+        assert not _has_provider_env_config(content)\n"]}]},{"kind":"pr","number":623,"title":"fix(doctor): add custom endpoint connectivity check for OPENAI_BASE_URL","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#573","number":573}],"category":"merged_via","implication":"superseded"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}