{"repo":"NousResearch/hermes-agent","public_id":"15697","display_label":"Browser detection and executable path resolution fixes","summary":"Multiple bugs and fixes around how Chromium/Chrome is detected across macOS app-bundles, Docker images, and custom executable paths. Covers the availability check logic, AGENT_BROWSER_EXECUTABLE_PATH propagation, and bundled vs. system browser discovery.","subsystem":"agent","counts":{"members":15,"open_issues":2,"open_issues_distinct":2,"open_prs":1,"closed_issues":2,"merged_prs":2,"attempt_prs":9},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":19595},"resolution":{"state":"partially_resolved","by":"pr-33184"},"freshness":{"state":"verified","last_verified_at":"2026-05-27T10:43:28+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_PARTIAL","link_density":0.11504761904761904},"fix_edges":[{"issue_number":15697,"pr_number":33184,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true},{"issue_number":19294,"pr_number":19595,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false}],"members":[{"kind":"issue","number":15697,"title":"[Bug]: Auto-launch failed: Chrome not found error when running hermes-cli with official Docker image","url":null,"state":"closed"},{"kind":"issue","number":19294,"title":"[Bug]: _chromium_installed() ignores AGENT_BROWSER_EXECUTABLE_PATH and system Chrome — browser tools unnecessarily gated","url":null,"state":"closed"},{"kind":"issue","number":48172,"title":"browser: macOS app-bundle Chrome is ignored by local tool availability check","url":null,"state":"open"},{"kind":"issue","number":66111,"title":"[Bug]: browser.executable_path config not passed to agent-browser subprocess — ARM64 browser timeout","url":null,"state":"open"},{"kind":"pr","number":15908,"title":"fix(docker): set AGENT_BROWSER_EXECUTABLE_PATH to Playwright's Chromium","url":null,"state":"closed","close_reason":{"category":"stale_abandoned","implication":"active"},"merged":false},{"kind":"pr","number":18635,"title":"fix(install): implement dynamic browser bin discovery for agent-browser","url":null,"state":"closed","close_reason":{"category":"silent_close","implication":"active"},"merged":false},{"kind":"pr","number":19298,"title":"fix: _chromium_installed() ignores AGENT_BROWSER_EXECUTABLE_PATH and system Chrome","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#19595","number":19595}],"category":"merged_via","implication":"superseded"},"merged":false},{"kind":"pr","number":19457,"title":"fix(browser): detect configured system chrome","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"45fd45103d6cb3d8a1910aad6ec9de7e3d55e4fb","number":0},{"kind":"pr","value":"#30161","number":30161},{"kind":"pr","value":"#33408","number":33408}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":19595,"title":"fix: _chromium_installed() honors AGENT_BROWSER_EXECUTABLE_PATH and system Chrome","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["tools/browser_tool.py"],"fix_hunks":[{"file":"tools/browser_tool.py","hunks":["@@ -2757,17 +2757,40 @@ def _chromium_search_roots() -> List[str]:\n def _chromium_installed() -> bool:\n     \"\"\"Return True when a usable Chromium (or headless-shell) build is on disk.\n \n+    Checks, in order:\n+\n+    1. ``AGENT_BROWSER_EXECUTABLE_PATH`` env var — the official way to point\n+       agent-browser at a pre-installed Chrome/Chromium.\n+    2. System Chrome/Chromium in PATH (``google-chrome``, ``chromium-browser``,\n+       ``chrome``).\n+    3. Playwright's browser cache (current logic) — directories containing\n+       ``chromium-*`` or ``chromium_headless_shell-*``.\n+\n     agent-browser (0.26+) downloads Playwright's chromium / headless-shell\n-    builds into ``PLAYWRIGHT_BROWSERS_PATH`` and won't start without them.\n-    When the CLI is present but no browser build is, the first browser tool\n-    call hangs for the full command timeout (often ~30s each) before\n-    surfacing a useless error. Guarding the tool behind this check prevents\n-    advertising a capability that will fail at runtime.\n+    builds into ``PLAYWRIGHT_BROWSERS_PATH`` and won't start without at least\n+    one of the three above being present.  Without a browser binary the CLI\n+    hangs on first use until the command timeout fires (often ~30s).  Guarding\n+    the tool behind this check prevents advertising a capability that will\n+    fail at runtime.\n     \"\"\"\n     global _cached_chromium_installed\n     if _cached_chromium_installed is not None:\n         return _cached_chromium_installed\n \n+    # 1. AGENT_BROWSER_EXECUTABLE_PATH — explicit user-configured browser\n+    ab_path = os.environ.get(\"AGENT_BROWSER_EXECUTABLE_PATH\", \"\").strip()\n+    if ab_path:\n+        if os.path.isfile(ab_path) or shutil.which(ab_path):\n+            _cached_chromium_installed = True\n+            return True\n+\n+    # 2. System Chrome/Chromium in PATH (common names)\n+    system_chrome = shutil.which(\"google-chrome\") or shutil.which(\"chromium-browser\") or shutil.which(\"chrome\")\n+    if system_chrome:\n+        _cached_chromium_installed = True\n+        return True\n+\n+    # 3. Playwright browser cache (legacy — chromium-* / chromium_headless_shell-* dirs)\n     for root in _chromium_search_roots():\n         if not root or not os.path.isdir(root):\n             continue\n"]}]},{"kind":"pr","number":33184,"title":"fix(docker): discover agent-browser Chromium binary at boot","url":null,"state":"merged","close_reason":{"category":"merged","implication":"superseded"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["docker/stage2-hook.sh"]},{"kind":"pr","number":48185,"title":"fix(tools): detect macOS app-bundle Chrome in browser availability gate","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"97888fed483c1e867666b6beb4eb03e409cc9481","number":0}],"category":"uncategorized","implication":"needs_llm"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":48225,"title":"fix: harden macOS desktop and browser resolution","url":null,"state":"closed","close_reason":{"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":48232,"title":"fix: detect macOS app-bundle browsers for tool checks","url":null,"state":"closed","close_reason":{"category":"superseded_by_pr","implication":"superseded"},"merged":false},{"kind":"pr","number":48252,"title":"fix(browser): detect macOS app-bundle Chrome in availability check (#48172)","url":null,"state":"closed","close_reason":{"category":"uncategorized","implication":"needs_llm"},"merged":false,"is_fix_pr":true,"fix_tier":"suggested","fix_detail_withheld":true},{"kind":"pr","number":66131,"title":"fix(browser): propagate browser.executable_path config to agent-browser subprocess (#66111)","url":null,"state":"open","close_reason":{"refs":[{"kind":"commit","value":"de96a829fa5d","number":0},{"kind":"pr","value":"#66111","number":66111},{"kind":"pr","value":"#66131","number":66131},{"kind":"pr","value":"#66131","number":66131},{"kind":"pr","value":"#66131","number":66131},{"kind":"pr","value":"#66131","number":66131},{"kind":"pr","value":"#374151","number":374151},{"kind":"pr","value":"#66111","number":66111},{"kind":"pr","value":"#66131","number":66131}],"category":"partial_fix","implication":"needs_llm"},"merged":false}],"trust":{"default_tier":"verified","includes_suggested":false}}