diagnosing-browser
Skill6 starsChanged 8 days agoMITView on GitHub
Diagnose Hermes browser automation issues — CDP connection failures, attach problems, agent-browser/build-gate history, and browser tool errors across the pre-v52 built-in tools and the v52 browser_exec surface.
- Reads credentials
- Installs packages
In this repository32 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- diagnosing-authSkill
- diagnosing-backupSkill
- diagnosing-bot-modeSkill
- diagnosing-cli-tuiSkill
- diagnosing-commandsSkill
- diagnosing-configSkill
- diagnosing-cronSkill
- diagnosing-desktopSkill
- diagnosing-gatewaySkill
- diagnosing-hooksSkill
- diagnosing-host-pressureSkill
- diagnosing-mcpSkill
- diagnosing-memoriesSkill
- diagnosing-memorySkill
- diagnosing-pathSkill
- diagnosing-pluginsSkill
- diagnosing-profilesSkill
- diagnosing-providersSkill
- diagnosing-runtimeSkill
- diagnosing-secretsSkill
- diagnosing-sessionsSkill
- diagnosing-skillsSkill
- diagnosing-storageSkill
- diagnosing-triageSkill
- diagnosing-updateSkill
- diagnosing-voiceSkill
- hermes-configuration-guideSkill
- hermes-post-updateSkill
- installing-hermesSkill
- plugin-authoringSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 77
Check config.yaml browser: block — pre-v52: backend and endpoint.
- Distinctive: line 90
After applying the fix:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Diagnosing Browser Automation
Goal: reduce any browser problem to one concrete fix — a CDP endpoint, a Chromium install, or a version ruling. Two upstream browser surfaces exist:
- Pre-v52 installed surface (through v0.22.2, what this guide runs against): built-in
browser_*tools (browser_snapshot, …) andbrowser.backend: cdp | playwright | browser_use. - Config v52+ (upstream
5894e750): agent-browser and the built-inbrowser_*tools are removed;browser_exec(tools/browser_use_cli.py::browser_exec) is the only core browser;browser.backendis dropped (51→52 migration,hermes_cli/config_migrations_browser.py) and agent-browser'sAGENT_BROWSER_*.env keys move to thebrowser.*keys below.
Detect the surface: the v52 run prints a one-time notice naming the dropped browser.backend key (step 51→52, hermes_cli/config_migrations_browser.py), and pre-v52 installs still accept that key — do not rely on key rejection; pin it with hermes --version.
1. Configuration shape
Pre-v52 (installed through v0.22.2; $HERMES_HOME is ~/.hermes on POSIX and %LOCALAPPDATA%\hermes on native Windows — hermes config path prints it):
# $HERMES_HOME/config.yaml
browser:
backend: "cdp" # cdp | playwright | browser_use
cdp:
endpoint: "http://127.0.0.1:9222"
user_data_dir: "$HERMES_HOME/chrome-debug"
playwright:
browser: "chromium" # chromium | firefox | webkit
headless: truev52+ (hermes_cli/config_defaults.py at 5894e750):
# $HERMES_HOME/config.yaml
browser:
cdp_url: "http://127.0.0.1:9222" # attach to an existing Chromium; "" = local launch
engine: "auto" # auto | lightpanda ("chrome" reads as auto)
executable_path: "" # "" = pm's chromium (`hermes pm install chromium`)
user_data_dir: "" # persistent profile dir; "" = fresh throwaway profile
use_real_profile: false # consent-gated: browse with a snapshot of the real profile2. How to inspect
/browser status— show current browser connection state/browser connect— auto-launch/connect to a local Chromium-family browser/browser connect ws://host:port— connect to a specific CDP endpoint (loopback only — unencrypted)/browser disconnect— detach and return to cloud/local modehermes browser close-profile— (Windows only) kill the profile's browser tree so a new real-profile snapshot can copy cookieshermes logs --follow— watch for browser-related errorsgoogle-chrome --version/brave-browser --version— check browser version
[!WARNING] CDP is a privileged browser-control interface.
ws://is unencrypted — reserve it for loopback (127.0.0.1). For remote CDP, usewss://(TLS) or an authenticated tunnel (e.g. SSH). Exposing CDP over cleartext on an untrusted network lets attackers observe or inject browser-control traffic.
3. Pitfalls (symptom → cause → fix)
- Browser not connecting — (a) browser not started with
--remote-debugging-port=9222; (b) port 9222 not open; (c) wrong endpoint URL. → Launch browser with--remote-debugging-port=9222 --user-data-dir="${HERMES_HOME:-$HOME/.hermes}/chrome-debug"(POSIX shell; native Windows:%LOCALAPPDATA%\hermes\chrome-debug); verify port is open (curl http://127.0.0.1:9222/json/version); check the endpoint in config.yaml (browser.cdp.endpointpre-v52,browser.cdp_urlv52+). - Chrome 144+ CDP tools fail despite successful connect — historically #12912 (now closed): Chrome 144+ built-in remote debugging reported success but CDP tools failed. → First re-check current behavior before downgrading — the upstream gate has since been reworked; only downgrade to <144 if a current failure reproduces, and check
hermes_cli/browser_connect.py(loopback attach + real-profile snapshot helpers) for how the endpoint is discovered and normalized. - Playwright not found (pre-v52 surface) — (a) Playwright not installed; (b) browser binaries not downloaded. → On a PM-era install run
hermes pm install playwright(these components are PM-managed opt-outs; a barepip installtargets your shell's Python, not Hermes's); on an older checkoutpip install playwright && playwright install chromium; verify through Hermes's own interpreter, not the shell's —python -c "import playwright"can report the module missing even afterhermes pm install playwrightsucceeded, sending you back to a repair you already did (there is nopythonshim on a PM-era install). Usehermes doctoror check the committed environment directly. On v52+ thebrowser:block has no Playwright keys — the local runtime path isbrowser_execplus Chromium (hermes pm install chromium); pin the surface before installing anything named Playwright. - agent-browser gate blocks CDP (pre-v52 surface, historically #15952, now closed) — old builds required agent-browser even with a CDP endpoint configured, and the gate later moved to a routed requirements check in
tools/browser_tool.py. v52 removed agent-browser and with it this gate;tools/browser_tool.pyandtools/browser_tool_install.pysurvive only as frozen compatibility stubs (tools/browser_tool.py::warm_agent_browser_npx_cache) for pre-PM update runs. → Try/browser connectfirst. If the current error names agent-browser, the running build predates v52: install it (hermes pm install agent-browser) or update Hermes. On v52+ an agent-browser error cannot occur. - Browser tools return empty or timeout — (a) browser crashed or closed; (b) page not loaded; (c) selector not found. → Check
/browser status; verify page loaded; inspect the DOM withbrowser_exec(v52+) orbrowser_snapshot(pre-v52). - Camofox backend unsupported — Camofox is REST-only, no CDP surface, and it left core (v52+ reads catalog-plugin values from the free-form
browser.camofoxmapping). → Switch to CDP or the localbrowser_execruntime. - Browser profile conflicts — multiple Hermes instances using same user-data-dir. → Use separate
user_data_dirper profile; close other browser instances. - Sub-agent can't use main agent's CDP browser — keychain access error on macOS. → Grant keychain access to the terminal app; or use a separate CDP endpoint per agent.
4. Localization workflow
/browser status— check current connection state.google-chrome --version— verify browser version (historical gate was <144 for CDP; only constrain the build if a current failure reproduces — see pitfall 2).curl http://127.0.0.1:9222/json/version— verify CDP endpoint is reachable (pre-v52backend: cdp, or v52+ withcdp_urlset; other runtimes verify their own path — see step 7).- Check config.yaml
browser:block — pre-v52: backend and endpoint; v52+:cdp_url,engine,executable_path. - Match the failure: not connecting → pitfall 1; Chrome-version-gated tools → pitfall 2 (only if reproduced now); Playwright missing → pitfall 3 (pre-v52); gated although configured → pitfall 4 (only if the current error names agent-browser on a pre-v52 build).
- Apply the fix,
/browser connect, and verify with/browser status. - Headless:
/browser*steps need a live session. Check thebrowser:block inconfig.yaml. Pre-v52: ifbrowser.backendiscdp, verify the configured endpoint and browser build. v52+: verifycdp_url(or the local launch path) andengine.
5. Cross-references
hermes-configuration-guide— for $HERMES_HOME resolution and config.yaml structurediagnosing-plugins— for plugin loading and capability issuesdiagnosing-cli-tui— for Windows-specific browser issues
Verification
After applying the fix:
/browser status # connection state healthy
hermes logs --follow # no browser errorsPass: browser connected or disconnected as intended; no errors in logs.
Fail: re-check the pitfall matched and re-apply the fix.
Report
This skill diagnoses browser automation issues — CDP connection failures, attach problems across the pre-v52 built-in tools and the v52 browser_exec surface, and browser tool errors. When you run the diagnostic workflow, present findings in the standard format below.
Summary
Your browser automation fails — browser tools return empty or timeout, the CDP attach fails, or the gate names a missing requirement. First record the surface you are on (hermes --version, plus the v52 notice if present) and the /browser status output; connection state is evidence, not an assumption. Historically Chrome 144+ built-in remote debugging or agent-browser gating broke attach — both were reworked, and config v52 upstream removed agent-browser plus the built-in browser_* tools entirely.
Findings
| Severity | What | Evidence |
| HIGH | CDP tools fail or return empty | /browser status output for the actual connection state; the DOM read (browser_exec v52+, browser_snapshot pre-v52) reproduces the failure; google-chrome --version records the browser build |
| MEDIUM | Pre-v52 agent-browser gate blocks an otherwise configured setup | Log names the missing requirement, and /browser status plus the version pin have pre-v52 in evidence; install only what the current error names |
| MEDIUM | Pre-v52 config keys (backend, cdp:, playwright:) on a v52+ install | Migration notice names the dropped keys; keys are ignored |
Recommended Fix
Reproduce first: confirm the failure on the current browser build and read the routed error. Only downgrade Chrome below 144 if a current failure implicates the build, and only install agent-browser (hermes pm install agent-browser, pre-v52 only) if the current error names it. On v52+ route all browser work through browser_exec and /browser connect — never the retired built-in tool names. Then run /browser connect and verify with /browser status.
References
$HERMES_HOME/config.yaml(hermes config pathprints it) — thebrowser:block (pre-v52backend+cdp:/playwright:sub-blocks; v52+cdp_url/engine/user_data_dirkeys)hermes_cli/browser_connect.py— shared helpers for attaching to a loopback CDP port and snapshotting the real profiletools/browser_use_cli.py::browser_exec— the only core browser (v52+)hermes_cli/config_migrations_browser.py— the v52 (51→52) migration that dropsbrowser.backendand movesAGENT_BROWSER_*tools/browser_supervisor.py+tools/browser_supervisor_capture.py+tools/browser_supervisor_dialogs.py+tools/browser_supervisor_frames.py— browser supervision logic
Facts re-verified 2026-09-21 against upstream source at commit cedf4a3d78675283fa93e4e6ea2d6212bf414667: hermes_cli/browser_connect.py, hermes_cli/browser_supervisor.py; plus the official docs (hermes-agent.nousresearch.com/docs/user-guide/features/browser). Re-checked 2026-10-12 against upstream main (53bc70c5): supervision logic lives under tools/browser_supervisor.py with capture/dialogs/frames split files (tools/browser_supervisor_capture.py, tools/browser_supervisor_dialogs.py, tools/browser_supervisor_frames.py); #12912 and #15952 closed, downgrade/agent-browser directives reframed as historical. Re-checked 2026-10-24 against upstream main (5894e750): config step 51→52 (hermes_cli/config_migrations_browser.py) removes agent-browser and the built-in browser_* tools; browser_exec (tools/browser_use_cli.py::browser_exec) is the only core browser and its browser: defaults (cdp_url, engine, executable_path, user_data_dir, use_real_profile, dialog_policy) carry no Playwright keys; /browser status|connect|disconnect remain — CLI path hermes_cli/cli_commands_mixin.py::_BROWSER_SUBCOMMANDS (with ::_browser_status) and gateway path hermes_cli/cli_browser_gateway.py::gateway_browser (the browser.manage RPC with _normalize_cdp_url); tools/browser_tool.py and tools/browser_tool_install.py are frozen stubs (tools/browser_tool.py::warm_agent_browser_npx_cache); hermes_cli/browser_connect.py resolves/launches a debug browser on a loopback CDP port (dual-stack IPv4/IPv6) and snapshots the real profile for browser.use_real_profile; tools/browser_supervisor.py, tools/browser_supervisor_capture.py, tools/browser_supervisor_dialogs.py, and tools/browser_supervisor_frames.py still exist. The installed host surface (v0.22.2, upstream dd519c74) predates v52 — the pre-v52 wording covers it. Re-verify before reuse.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

