install.md guided users through installing browser-harness and connecting to a
browser, but assumed BROWSER_USE_API_KEY already existed — it never explained
how to obtain a key. An agent following install.md in a headless environment
(no local Chrome) dead-ends at the cloud-browser step.
Add a "Get an API key" section that:
- frames the key as optional (local browsers are free; the key is only for the
recommended cloud browsers);
- defaults to the agent challenge-response self-signup (POST /cloud/signup ->
/verify -> bu_ key, free account, no human);
- after success, tells the agent to explain what it did and handle ownership:
if the user already has an account, use their key (ask, or fetch it via
browser-harness in their own browser); if not and they want to keep the
account, run /cloud/signup/claim and open the claim URL in their browser;
- falls back to human key creation if the challenge fails.
Mirrors docs.browser-use.com/llms.txt.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Focusing the plugin on Claude Code for now; Grok falls back to
.claude-plugin/plugin.json anyway, so .grok-plugin was redundant.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
browser-harness is the single source of truth for its own plugin: the
browser-use/plugins marketplace remote-sources this repo (pinned SHA)
instead of vendoring a copy, so there is no drift. Ships skills only;
the CLI stays a one-time install prerequisite.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude Code's marketplace schema expects a string source (".") for a
local plugin; xAI's .grok-plugin keeps {type:local}. Host-specific by
design. Keeps the xAI pin commit (f20e4a) reachable as an ancestor.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Packages browser-harness as an installable plugin for the xAI Grok and
Claude Code plugin marketplaces. Ships skills only; the browser-harness
CLI stays a one-time install prerequisite (skills/browser-harness/references/install.md).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds domain-skills/hubspot/private-app-webhooks.md covering the
subscription editor drawer flow, the React-Select coordinate-click
requirement, the "SubscribeLoading" button-text trap, the two-step
save (drawer Subscribe → top-right Commit changes), and verification
via the read-only /webhooks tab.
Pairs with the existing private-app-creation.md and private-app-rotation.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds close_tab(target=None) alongside new_tab()/switch_tab() as the
missing symmetric tab operation. Accepts a targetId string, a tab dict
from list_tabs()/current_tab(), or no argument to close the currently
attached tab.
Each Chrome tab is a separate renderer process (~50-200MB); closing
unused tabs after an automation task prevents resource bloat.
The green-circle prefix didn't fit the harness theme. Horse echoes the project name (browser-harness) and pairs naturally with chess-knight imagery.
Also fixes a latent slice bug: the prefix is 3 UTF-16 units (surrogate pair + space), so unmark uses slice(3) and removes the trailing space cleanly. The previous 🟢 + slice(2) left the space behind, which would slowly accumulate leading spaces across switch_tab cycles.