What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Hermes Agent can control a browser in the cloud or on your own machine. A typical task is: configure a browser backend, call browser_navigate, inspect the accessibility-tree snapshot, act on element IDs such as @e1, and use browser_vision when you need a rendered screenshot or visual analysis. You can attach an existing Chrome-family browser over CDP, run Hermes’ packaged Chromium locally, or select a managed Browser Use, Browserbase, or Firecrawl session.

This guide shows the complete workflow, explains what each backend is good at, and covers screenshots, local Chrome attachment, reliability, costs, and common failures. If you only need a clean image or PDF rather than interactive browser control, the ScreenshotNeo API at ScreenshotNeo is a simpler route.

What Hermes Agent provides

Hermes’ official browser documentation describes “a full browser automation toolset with multiple backend options.” All supported modes let an agent navigate pages, interact with controls, fill forms, and extract information. The important distinction is where the browser runs and which operational features the provider adds.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Cloud browsers: Browser Use, Browserbase, and Firecrawl run managed sessions. They are useful when you need remote execution, anti-bot tooling, reusable profiles, or scraping features.
  • Local browsers: Camofox local mode, Lightpanda, Hermes’ packaged/local Chromium through agent-browser, and a Chrome-family browser attached through CDP keep execution on your machine.

For simple, text-only retrieval, Hermes recommends web_search or web_extract; browser automation is intended for interactions, forms, dynamic pages, and visual checks.

Set up your first browser session

  1. Configure Browser Automation. Run hermes setup tools and follow the provider setup for your chosen mode. Cloud providers require their documented credentials; Browserbase, for example, uses an API key and project ID.
  2. Select the active provider. Adding or removing a provider key does not automatically switch an existing selection. Change the provider in Hermes’ browser-automation settings after credentials are present.
  3. Navigate to a read-only page first. Start with browser_navigate and a URL where no account or destructive action is involved.
  4. Inspect the page structure. Call browser_snapshot. Hermes represents the page as an accessibility tree and assigns interactive elements reference IDs such as @e1.
  5. Interact using references. Use the click, type, press, and scroll tools with the IDs returned by the snapshot. Take a fresh snapshot after navigation or a major page update because IDs can change.
  6. Use visual inspection only when it adds information. Call browser_vision for layout, charts, CAPTCHA state, or other details that an accessibility tree cannot express.

When a page behaves unexpectedly, inspect it with browser_console before repeatedly retrying actions. Console errors often reveal blocked scripts, navigation failures, or application exceptions.

The accessibility-tree interaction loop

1. Navigate

browser_navigate("https://example.com/account")

The navigation call establishes the page context. Wait for it to settle before attempting a click or typing action.

2. Snapshot and identify controls

browser_snapshot()

The result is a structured accessibility tree. A login form might expose references such as @e1 for the email field, @e2 for the password field, and @e3 for the submit button. Use the visible role and label, not a guessed CSS selector.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

3. Act, then re-snapshot

browser_click("@e3"); browser_snapshot()

After a click, modal, route change, or form submission, obtain a new snapshot. This prevents stale-reference errors and lets the agent verify the resulting state.

4. Add waits for dynamic interfaces

For pages that render asynchronously, wait for a selector, a delay, or network idle before reading the next snapshot. A selector wait is usually more deterministic than an arbitrary long delay; a delay is useful for animations or third-party widgets that do not expose a reliable target.

Taking and interpreting screenshots with browser_vision

browser_vision captures the current browser view and asks a vision model to analyze it. Use it when you need to confirm that a menu opened, read a chart, inspect a visual layout, or determine whether a CAPTCHA or other human-verification screen is present.

Hermes saves these screenshots in ~/.hermes/cache/screenshots/ and automatically cleans them up after 24 hours. Treat that directory as temporary evidence rather than an archive. If you need a durable artifact, copy the file to your own controlled storage before the cleanup window expires.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Vision is complementary to snapshots, not a replacement. Snapshots are generally better for locating an exact button or field by accessible name; vision is better for pixels, relative placement, canvas content, and visual state.

Choose a browser backend

Backend Where it runs Documented strengths Best fit
Browser Use cloud Managed cloud Chromium Stealth, residential proxies, CAPTCHA solving, reusable profiles Sites that need managed identity and anti-bot capabilities
Browserbase cloud Managed cloud browser Anti-bot tooling; API key and project ID credentials Teams standardizing remote browser sessions
Firecrawl cloud Cloud browser mode Built-in scraping Workflows that combine interaction with extraction
Camofox local mode Your machine Local execution Keeping browser traffic on a controlled host
Lightpanda Local Local browser option supported by Hermes Projects that specifically want this local engine
Chrome/Brave/Chromium/Edge over CDP An already-running local browser Attach to an existing profile and window Using your own logged-in session or extensions
Hermes packaged/local Chromium via agent-browser Your machine Local browser without selecting a cloud provider Reproducible local automation with a packaged browser

No official source establishes a benchmark for screenshot accuracy, latency, or overall success rate for these choices. Select by execution location, anti-bot needs, profile persistence, scraping requirements, credential handling, visual-analysis needs, and operational control rather than an unverified speed claim.

Attach an existing Chrome-family browser

Hermes can connect to a running Chrome, Brave, Chromium, or Edge instance through the Chrome DevTools Protocol (CDP). This is the path to use when the session you need already contains cookies, an authenticated profile, or extensions.

  1. Start the Chrome-family browser with remote-debugging/CDP enabled according to that browser’s documentation.
  2. In Hermes, run /browser connect.
  3. Choose the exposed browser session when Hermes prompts for a target.
  4. Run browser_snapshot and verify that the expected tab and account state are visible before performing actions.

Only attach to a profile you are authorized to automate. A connected profile exposes its page state to the agent, so use a dedicated browser profile when possible and avoid leaving unrelated private tabs open.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Headed mode and local-session behavior

Local automation normally runs without a visible window. Set browser.headed: true in Hermes’ configuration or set the environment variable AGENT_BROWSER_HEADED=1 to keep a visible local window between turns. Headed mode is helpful when debugging focus, popups, downloads, or layout problems.

Headed does not make a session permanent: idle sessions are still reaped after the configured timeout. For long workflows, design checkpoints so the agent can recover by navigating back to a known URL and taking a new snapshot.

Reliability, performance, and operating cost

Make actions deterministic

  • Prefer accessibility labels and roles from snapshots over coordinates.
  • Wait for a meaningful selector or network-idle state before reading dynamic content.
  • Take a fresh snapshot after every navigation, modal, or route transition.
  • Use a dedicated profile for repeatable cookies and authentication.
  • Capture console output when a page fails instead of blindly increasing delays.

Control visual workload

Use snapshots for ordinary form work and reserve browser_vision for visual questions. This reduces unnecessary vision calls while preserving a screenshot when the visual state matters. Screenshots saved by Hermes are temporary and are removed after 24 hours, so export only the artifacts your workflow actually needs.

Understand provider cost and control

Cloud backends shift browser maintenance, proxying, and anti-bot operations to a provider but require credentials and acceptance of that provider’s execution environment. Local modes provide more direct control over network location and data handling but leave browser installation, updates, and connectivity to you. The documented material does not publish a common price or performance schedule for all backends; check the selected provider’s current terms before production use.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Troubleshooting common failures

The provider key is set, but Hermes uses another backend

Cause: Hermes retains an existing provider selection; changing keys alone does not switch it.

Fix: Open browser-automation settings and explicitly select the intended provider, then retry a simple navigation.

Clicks fail with an unknown or stale reference

Cause: The page changed after the snapshot, so the old @eN ID is no longer valid.

Fix: Call browser_snapshot again, locate the control by its current accessible name, and click the new reference.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The page is blank or partially rendered

Cause: Scripts, network requests, or a client-side exception failed.

Fix: Wait for network idle, inspect browser_console, and verify that the selected backend can reach the site. If the page requires a logged-in profile, use a properly authenticated local profile or a cloud profile configured for that site.

A CAPTCHA or bot-check blocks progress

Cause: The destination has challenged the browser or its network identity.

Fix: Choose a backend whose documented capabilities match the site’s anti-bot requirements, such as Browser Use’s managed stealth, residential proxies, and CAPTCHA solving. Do not attempt to bypass a site’s access controls without authorization.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

CDP connection cannot find the browser

Cause: The browser was not started with a reachable debugging endpoint, the endpoint is bound to the wrong interface, or another process owns the expected port.

Fix: Restart the browser with CDP enabled, confirm the endpoint is reachable locally, close conflicting instances, then run /browser connect again.

The headed window disappears

Cause: Hermes reaped an idle session after its configured timeout.

Fix: Keep the workflow active or reconnect and resume from a checkpoint URL. Headed mode controls visibility, not session lifetime.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup: capture a clean image with ScreenshotNeo

If your deliverable is a screenshot or PDF rather than a sequence of interactive browser actions, ScreenshotNeo is the first service to try. It accepts one GET request and returns PNG, JPEG, WebP, or PDF. Before capture it accepts cookie or consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be disabled.

Only clean shots are billed. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and the response identifies the result with X-Page-Verdict and X-Billed headers. ScreenshotNeo also provides an MCP server with take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.

The API supports full-page captures with lazy images loaded, CSS-selector element shots, dark mode, 12 device presets plus custom viewports, retina scale, PDF paper size/margins/landscape/page ranges, HTML/CSS-to-image, custom CSS and JavaScript, pre-capture clicks, hidden selectors, waits for selectors/delay/network idle, ad/tracker/request/resource blocking, custom headers/cookies/user agent/Authorization, timezone and geolocation, transparent backgrounds, resizing, configurable-TTL caching, signed links for public <img> tags, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, an OpenAPI specification, and compatibility with parameter names used by other screenshot APIs.

One-call examples

See the ScreenshotNeo API documentation for all options. The following calls capture https://stripe.com; replace the URL and API key with your values.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

Plans

Plan Included shots Price
Free 1,000 per month $0, no card
Starter 3,000 $5
Growth 15,000 $15
Pro 60,000 $39
Scale 250,000 $99
Business 1,000,000 $249

Every feature is included on every plan, and yearly billing gives two months free. The free tier includes 1,000 screenshots each month with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account to start.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.