Skip to main content

hermes-plugin-chrome-profiles

❖ Communityv2.0.0★ 12

Switch Hermes browser tools to a named Chromium-family profile (Chrome, Edge, Brave), local or remote, over CDP.

Open in Hermes Desktop
hermes plugins install hermes-plugin-chrome-profiles

What it adds

Tools 1

browser_profile

README

From the reviewed commit 03d24e9 ↗; it updates when the author re-pins.

hermes-plugin-chrome-profiles

Switch Hermes' browser tools to a named Chromium-family browser over CDP, so the agent inherits that browser's cookies and logged-in sessions.

Adds one tool, browser_profile, and one slash command, /browser-profile.

What it affects

Setting a profile sets BROWSER_CDP_URL — the same public override /browser connect uses — which sits at the top of Hermes' backend precedence. So a switch redirects every browser surface at once:

  • browser_exec (Browser Use CLI backend)
  • the built-in browser_navigate / browser_click / browser_snapshot / browser_vision tools
  • browser_vault_fill and friends (the CDP supervisor is attached for you)

It also flushes live browser sessions, so the next tool call dials the new endpoint instead of a stale one.

Requirements

  • A Chromium-family browser: Chrome, Chromium, Brave, Brave Origin, or Edge. Firefox and Camofox have no CDP surface and are not supported.
  • browser.backend: off is fine, browser-use is fine, a cloud provider is fine — the override wins over all of them. browser.cdp_url in config.yaml is the one thing that outranks the plugin for tools that read config directly, so leave it unset.

Configuration

Profiles live in your Hermes profile's config.yaml, not in the plugin directory (a reinstall replaces the plugin snapshot):

plugins:
  entries:
    chrome-profiles:
      settings:
        launch_timeout: 20        # optional, seconds
        profiles:
          work:
            port: 9250           # required

          uni:
            port: 9251
            browser: edge        # chrome | chromium | brave | brave-origin | edge
            headless: false

          scraper:
            port: 9252
            headless: true

          box:
            host: 192.168.1.100  # any 'host' => remote, never launched
            port: 9222

Edits are picked up on the next call — no restart.

Profile fields

Field Required Meaning
port yes Remote-debugging port.
host — Set it to make the profile remote: reachability is checked, nothing is launched.
browser — Which Chromium family binary. Default: your system default Chromium.
binary — Absolute path, overriding browser detection.
data_dir — User-data-dir. Default: ~/.hermes/browser-profiles/<name>.
profile_directory — Profile inside the data dir (Default, Profile 2).
headless — Default: headed, except on a display-less Linux host where a headed launch would die.

data_dir and your everyday browser

Pointing data_dir at a browser's own default profile is refused. Chromium ≥136 rejects remote debugging on the default user-data-dir, and your running browser holds it via SingletonLock — the launch fails or attaches to nothing.

To browse as your real logged-in self, use Hermes' built-in support instead, which snapshots the profile and launches on the copy:

browser:
  use_real_profile: true

This plugin is for dedicated profiles: separate work/personal/scraper identities you log into once, plus remote browsers on other machines.

One browser per data_dir

Chromium's single-instance lock is per user-data-dir. Launching a second browser against a directory another process already holds is silently absorbed — the new --remote-debugging-port is ignored, a tab just opens in the existing process, and the port never binds. --profile-directory does not escape this; the lock covers the whole user-data-dir, not one profile inside it.

The plugin detects the holder before launching and fails immediately, naming the PID, instead of burning launch_timeout on a browser that will never appear. Give each profile its own data_dir (the default already does), or quit the holder first.

This failure mode was diagnosed by LaansDole.

Usage

browser_profile()                        # list profiles, show which is active
browser_profile(name="work")             # switch (launches on demand)
browser_profile(disconnect=True)         # release the override
/browser-profile          # list
/browser-profile work     # switch
/browser-profile off      # release

Installation

hermes plugins install anpicasso/hermes-plugin-chrome-profiles

Then add a profiles block to config.yaml (see above) and restart the gateway — Python plugins have no hot reload.

Notes

  • Browsers this plugin launched are terminated on plugin unload / reload. A browser that was already listening on the port is left alone.
  • A port held by a non-CDP process is reported as an error rather than fought over.
  • The launched browser is user-visible and may hold live logins; the tool result says so, so the agent avoids closing tabs or navigating away from the user's work.

Credits

The single-instance-lock failure mode (a second launch against a held data_dir being silently absorbed) was diagnosed by LaansDole.

Self-check

PYTHONPATH=~/.hermes/hermes-agent python3 ~/.hermes/plugins/chrome-profiles/__init__.py

Exercises config resolution against the real host helpers. Launches nothing.

jev-approvals❖ Community★ 20

TypeSafe's Jev decision model as Hermes' smart-approval reviewer only: it cannot generate text and refuses every other task. Supports TypeSafe direct, OpenRouter, and configurable Jev-compatible HTTPS endpoints with optional endpoint-specific authentication; validates typed answers and endpoint/redirect boundaries, redacts command credentials, and records bounded structured audit logs. Disclosure — each command routed to smart approval (redacted best-effort) and the operator's smart-policy text leave the machine for the configured third-party endpoint; provider or validation failures fail closed to ESCALATE.

Models
oc-free-provider❖ Community★ 9

Unofficial OpenCode Zen free-model transport for Hermes. Discovers live zero-cost tool-capable models by intersecting OpenCode Zen and models.dev over HTTPS, persists only the last successful intersection for restart fallback, and bidirectionally translates compatible OpenCode and Hermes tool schemas, calls, choices, and replayed history while Hermes executes tools locally. No OpenCode CLI, Node.js, npm, or npx dependency. Disclosure — prompts, tool schemas, tool results, and other conversation content leave the machine for OpenCode and the selected model provider; model availability, retention, data use, and permission are governed by their current terms.

Models
jev-curator❖ Community★ 3

TypeSafe Jev semantic governance for Hermes' native Curator: classifies relationships between complete skill packages, produces content-hash-bound, fail-closed consolidation plans, and locally guards background destructive skill_manage calls while Hermes retains control of backups and mutations. A profile-scoped 60-second lifecycle debounce coalesces skill changes into dry refreshes. Disclosure — no egress occurs by default; after allow_content_egress is explicitly enabled, redacted bounded skill content is sent to the configured TypeSafe, OpenRouter, or custom Jev endpoint and may spend provider credits. Automatic refreshes never apply mutations, and missing, stale, or incomplete evidence fails closed.

Automation
cursor-provider❖ Community★ 0

Cursor model provider using the official proprietary Cursor SDK. Disclosure — uses Cursor's proprietary cursor-sdk (PyPI, bundled binary bridge on loopback) with the user's CURSOR_API_KEY; sends the full conversation, tool schemas/results and images (HTTPS URLs or base64) to Cursor; keeps private per-session SDK workspaces under HERMES_HOME/cache/cursor-sdk; Cursor built-in tools and MCP are requested off and Hermes keeps tool execution and approvals.

Models
go-whatsapp❖ Community★ 0

Outbound WhatsApp tools through GOWA: registers GOWA's native MCP server and adds device listing, pairing, and removal. Setup can connect an existing server or explicitly install pinned GOWA v9.5.0 as a loopback-only authenticated native user service on Linux x86_64, macOS x86_64/arm64, or Windows x86_64. Disclosure — agents can send messages and mutate WhatsApp state through the linked account; session databases grant account access. The plugin does not ingest incoming messages or configure webhooks.

Tools
kiro-provider❖ Community★ 0

Native Kiro model provider over HTTPS with AWS Builder ID / IAM Identity Center device login. Disclosure — dynamically registers an AWS OIDC public client named `hermes-kiro` during login and stores OAuth grants in Hermes' profile-scoped auth.json credential pool.

Models

← Back to the catalog · catalog built Oct 14, 2026