Files
wehub-resource-sync 426e9eeabd
Benchmark Bridge Tests / benchmark (bunx @biomejs/biome check packages/lifeops-bench/src, benchmark-lint) (push) Waiting to run
Benchmark Bridge Tests / benchmark (bunx vitest run --config packages/lifeops-bench/vitest.config.ts --root packages/lifeops-bench --passWithNoTests, benchmark-tests) (push) Waiting to run
Build Agent Image / build-and-push (push) Waiting to run
Chat shell gestures / Chat shell gesture + parity e2e (push) Waiting to run
ci / test (push) Waiting to run
ci / lint-and-format (push) Waiting to run
ci / build (push) Waiting to run
ci / dev-startup (push) Waiting to run
Cloud Gateway Discord / Test (push) Waiting to run
Cloud Gateway Webhook / Test (push) Waiting to run
Cloud Tests / lint-and-types (push) Waiting to run
Cloud Tests / unit-tests (push) Waiting to run
Cloud Tests / integration-tests (push) Waiting to run
Cloud Tests / e2e-tests (push) Blocked by required conditions
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
Deploy Apps Worker (Product 2) / Determine environment (push) Waiting to run
Deploy Apps Worker (Product 2) / Deploy apps worker to apps-control host (${{ needs.determine-env.outputs.environment }}) (push) Blocked by required conditions
Deploy Eliza Provisioning Worker / Determine environment (push) Waiting to run
Deploy Eliza Provisioning Worker / Deploy worker to Hetzner host (${{ needs.determine-env.outputs.environment }} @ ${{ needs.determine-env.outputs.deployment_sha }}) (push) Blocked by required conditions
Dev Smoke / Classify changed paths (push) Waiting to run
Dev Smoke / bun run dev onboarding chat (push) Blocked by required conditions
Dev Smoke / Vite HMR dependency-level smoke (push) Blocked by required conditions
Electrobun Submodule Guard / electrobun gitlink is fetchable (push) Waiting to run
gitleaks / gitleaks (push) Waiting to run
Markdown Links / Relative Markdown Links (push) Waiting to run
Publish @elizaos/example-code / check_npm (push) Waiting to run
Publish @elizaos/example-code / publish_npm (push) Blocked by required conditions
Publish @elizaos/plugin-elizacloud / verify_version (push) Waiting to run
Publish @elizaos/plugin-elizacloud / publish_npm (push) Blocked by required conditions
Quality (Extended) / Homepage Build (PR smoke) (push) Waiting to run
Quality (Extended) / Comment-only diff guard (push) Waiting to run
Quality (Extended) / Format + Type Safety Ratchet (push) Waiting to run
Quality (Extended) / Develop Gate (secret scan + UI determinism) (push) Waiting to run
Quality (Extended) / Develop Gate (lint) (push) Waiting to run
Sandbox Live Smoke / Sandbox live smoke (push) Waiting to run
Snap Build & Test / Build Snap (amd64) (push) Waiting to run
Snap Build & Test / Build Snap (arm64) (push) Waiting to run
supply-chain / sbom (push) Waiting to run
supply-chain / vulnerability-scan (push) Waiting to run
Build, Push & Deploy to Phala Cloud / build-and-push (push) Waiting to run
Test Packaging / Validate Packaging Configs (push) Waiting to run
Test Packaging / PyPI on Python ${{ matrix.python }} (push) Waiting to run
Test Packaging / Pack & Test JS Tarballs (push) Waiting to run
Test Packaging / elizaos CLI global-install smoke (node + bun) (push) Waiting to run
UI Fixture E2E / ui-fixture-e2e (push) Waiting to run
UI Fixture E2E / fixture-e2e (push) Waiting to run
UI Story Gate / story-gate (push) Waiting to run
vault-ci / test (macos-latest) (push) Waiting to run
vault-ci / test (ubuntu-latest) (push) Waiting to run
vault-ci / test (windows-latest) (push) Waiting to run
vault-ci / app-core wiring tests (push) Waiting to run
verify-patches / verify patches/CHECKSUMS.sha256 (push) Waiting to run
Voice Benchmark Smoke / voice-emotion fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voiceagentbench fixture smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench-quality unit smoke (push) Waiting to run
Voice Benchmark Smoke / voicebench TypeScript unit (no audio) (push) Waiting to run
Voice Benchmark Smoke / voice bench smoke summary (push) Blocked by required conditions
Voice Workbench / headless workbench (mocked backends) (push) Waiting to run
Voice Workbench / real acoustic lane (nightly, provisioned only) (push) Waiting to run
Windows CI / windows ([bun run --cwd packages/app-core test bun run --cwd packages/elizaos test bun run --cwd packages/cloud/shared test], app-and-cli) (push) Waiting to run
Windows CI / windows ([bun run --cwd packages/scenario-runner test bun run --cwd packages/vault test bun run --cwd packages/security test bun run --cwd plugins/plugin-coding-tools test], framework-packages) (push) Waiting to run
Windows CI / windows ([bun run --cwd plugins/plugin-elizacloud test bun run --cwd plugins/plugin-discord test bun run --cwd plugins/plugin-anthropic test bun run --cwd plugins/plugin-openai test bun run --cwd plugins/plugin-app-control test bun run --cwd plugins/pl… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run build --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/agent --concurrency=4 node packages/scripts/run-bash-linux-only.mjs scripts/verify-riscv64-buildpaths.sh node packages/scripts/run… (push) Waiting to run
Windows CI / windows ([node packages/scripts/run-turbo.mjs run typecheck --filter=@elizaos/core --filter=@elizaos/shared --filter=@elizaos/cloud-shared --concurrency=4 bun run --cwd packages/core test bun run --cwd packages/shared test], core-runtime, 75) (push) Waiting to run
Test Packaging / Build & Test PyPI Package (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 12:43:05 +08:00
..

@elizaos/plugin-browser

Browser automation and companion bridge plugin for elizaOS. Adds the BROWSER action and MANAGE_BROWSER_BRIDGE action to any Eliza agent, owns the Eliza browser workspace (electrobun-embedded BrowserView on desktop, JSDOM fallback on web/mobile), and manages the Chrome/Safari Agent Browser Bridge companion extension.

What this plugin provides

Actions

BROWSER — Controls a registered browser target. The agent picks the best available backend automatically, or you can pin a specific target with the target parameter. Supported operations:

action value What it does
open Open a URL in a new tab
navigate Navigate an existing tab to a URL
click Click a DOM element by CSS selector
type Type text into a selector
press Press a keyboard key
get Get a DOM value
state Return current tab state (URL, title)
snapshot Capture a DOM snapshot
screenshot Capture a screenshot
reload Reload the current tab
back / forward Browser history navigation
close Close a tab
show / hide Show or hide the browser window
wait Wait for a selector to appear
tab Tab management (list/new/close/switch)
realistic_click Animated cursor click (visible to user)
realistic_fill Animated fill with per-character delay
realistic_type Animated typing
realistic_press Animated key press
cursor_move Animate cursor to a position
cursor_hide Hide the cursor overlay
autofill_login Fill saved credentials into a browser tab (vault-gated; requires domain)

MANAGE_BROWSER_BRIDGE — Manages the Chrome/Safari companion extension. Subactions: install (build + reveal + open manager), reveal_folder (open the build folder in Finder/Explorer), open_manager (chrome://extensions), refresh (report paired companions and settings). Owner-only.

Browser targets

The plugin uses a pluggable target registry in BrowserService. Targets are selected automatically by availability and score:

Target ID Backend When available
workspace Electrobun BrowserView (desktop) or JSDOM (web) Always
bridge Paired Chrome/Safari via companion extension At least one companion paired
stagehand Playwright/Stagehand via HTTP endpoint ELIZA_BROWSER_STAGEHAND_COMMAND_URL or STAGEHAND_SERVER_URL set

External plugins can register additional targets by calling BrowserService.registerTarget(target).

Provider

browser_workspace — Injects the current dispatch mode (desktop / web) and a capped list of open tabs into agent context. Active when the browser or web context is selected.

Routes

/api/browser-bridge/* — HTTP surface for the companion extension: pairing, settings, tab sync, page-context ingest, session progress, and extension package build/download.

Requirements

Auto-enable

The plugin is opt-in. It activates when config.features.browser is truthy in the elizaOS agent config:

{
  "features": {
    "browser": true
  }
}

Environment variables

Variable Purpose
ELIZA_BROWSER_STAGEHAND_COMMAND_URL Full URL for the Stagehand command endpoint
STAGEHAND_SERVER_URL Stagehand base URL (commands go to <url>/api/browser-command)
ELIZA_BROWSER_STAGEHAND_URL Alias for STAGEHAND_SERVER_URL
ELIZA_BROWSER_STAGEHAND_AUTO_SETUP Set false to disable automatic stagehand-server install/build
ELIZA_BROWSER_ALLOW_STAGEHAND_ON_MOBILE Set true to allow stagehand target on mobile
ELIZA_MOBILE_PLATFORM / ELIZA_PLATFORM / CAPACITOR_PLATFORM Platform hint for target scoring (ios/android/mobile)

Vault keys (set by the user, not env vars)

autofill_login only fires when the user has pre-authorized it per domain:

  • creds.<domain>.:autoallow = "1" — set via Settings → Vault → Logins.

Without this flag, the action returns an error rather than prompting interactively.

Companion extension authentication

Companion-scoped endpoints require two headers:

X-Browser-Bridge-Companion-Id: <companion uuid>
Authorization: Bearer <pairing token>

Legacy header aliases (X-LifeOps-Browser-Companion-Id, x-eliza-browser-companion-id) are not accepted.

Database

Drizzle tables in the browser PostgreSQL schema (applied by elizaOS plugin-sql migrator):

  • browser_bridge_companions
  • browser_bridge_settings
  • browser_bridge_tabs
  • browser_bridge_page_contexts

Registering a custom browser target

Any plugin can extend the browser dispatch surface at runtime:

import { BrowserService, BROWSER_SERVICE_TYPE } from "@elizaos/plugin-browser";
import type { BrowserTarget } from "@elizaos/plugin-browser";

const myTarget: BrowserTarget = {
  id: "my-target",
  name: "My Browser",
  description: "Custom browser backend.",
  kind: "external",
  priority: 50,
  available: async () => true,
  execute: async (command) => { /* ... */ },
};

const browserService = runtime.getService<BrowserService>(BROWSER_SERVICE_TYPE);
browserService?.registerTarget(myTarget);