oh-my-webbridge Docs
Skip to Content

Getting started

Install the daemon and the browser extension, pair a browser and run the first commands.

Developer preview

omw is in developer preview and iterating rapidly. THERE WILL BE COMPATIBILITY-BREAKING CHANGES.

Chrome and Firefox can run side by side, and each browser is paired on its own.

Requirements

  • Chrome 156 or later, or Firefox 153 or later.
  • macOS or Linux, on the same computer as the browser.
  • zstd to unpack a release archive.
  • Go 1.27.3, Node 24 and pnpm 11 to build from source.

Install the daemon

Download omw-<version>-<os>-<arch>.tar.zst for your platform from the releases page and check it against the SHA256SUMS file from the same release. Unpack it:

zstd -dc omw-<version>-darwin-arm64.tar.zst | tar -xf - -C "$HOME/.local"

The archive holds bin/omw, README.md and the license files. Keep the binary on your PATH; the login service records that path.

Install the extension

Unpack omw-<version>-chrome-mv3.tar.zst into a folder. Open chrome://extensions, turn on Developer mode, choose Load unpacked and select that folder; the manifest sits at the archive root. A source build loads dist/extension the same way.

Set up the browser

Installing the extension opens the setup page. The popup reopens it with Open setup when the browser is not paired, the daemon is not running, or the daemon refuses the connection.

Start the daemon

Run omw start. It starts the daemon in the background and prints started, or already running when one is up. The step completes by itself once the page reaches the daemon; until then it reads "Waiting for the daemon on 127.0.0.1:17373".

Pair this browser

Run omw pair. It prints a six-digit code such as 482 913, valid for 5 minutes and 5 attempts. Type the code into the pairing code field. The extension saves the daemon token and shows "This browser is paired."

Try it with an agent

Install the agent skill with omw install-skill ~/.agents/skills, then ask the agent for a browser task, for example to read the active tab.

Firefox adds a step of its own before the last one, Allow scripts, whose button carries the same label. The evaluate action needs the optional user script permission; you can grant it there, or later under Settings, then Pages.

The extension pages, the popup and the toolbar tooltip use the language of the browser. To choose another language, open the language menu at the bottom of the side rail on the setup or settings page. The extension has English, Traditional Chinese (Taiwan, Hong Kong and Macau) and Simplified Chinese.

Start at login

Move the binary to the path you intend to keep, then run:

omw service install

On macOS the command writes ~/Library/LaunchAgents/app.oh-my-webbridge.plist and loads it with launchctl. On Linux it writes ~/.config/systemd/user/oh-my-webbridge.service and enables the unit with systemctl --user. The unit runs omw serve with the configuration directory used by the install command. Stop a daemon that omw start launched before installing the service, because the service starts its own. Stop the service through its manager:

launchctl bootout gui/$(id -u)/app.oh-my-webbridge
systemctl --user disable --now oh-my-webbridge.service

omw stop asks a running daemon to exit and leaves tabs open. With the service installed, use the service manager so the daemon does not start again.

Install the agent skill

omw install-skill DIR writes DIR/oh-my-webbridge/SKILL.md and copies the guide built into the binary. It refuses to overwrite an existing file, so delete the old one before installing again. omw skill prints the same guide. The guide tells an agent which commands to run, how sessions and tab ownership work, and which errors to expect.

First commands

omw call research navigate '{"url":"https://example.com","group_title":"Research"}'
omw call research snapshot
omw call research evaluate '{"code":"document.title"}'
omw call research close_session

The first argument after omw call is the session name; keep one name per task. Each command prints JSON on stdout.

  • navigate opens a background tab in a new group titled Research and returns the tab id. Later navigations in the same session reuse that tab; pass newTab to open another.
  • snapshot returns the accessibility tree with @e references that click and fill accept.
  • evaluate returns the value of the expression.
  • close_session closes the tabs the session owns and releases any borrowed tab.

The third argument is a JSON object. Pass - to read it from stdin, which avoids shell quoting:

omw call research evaluate - < request.json

When both browsers are connected, name one right after omw call:

omw call --browser firefox research snapshot

Check the connection

omw doctor prints the config path on stderr and the status JSON on stdout, then one line per browser on stderr:

chrome: connected (VERSION)
firefox: not connected

omw status prints the same status JSON and browser lines without the config path. Both exit nonzero when the daemon does not answer.

The token is the browser credential

omw connection prints the daemon endpoint and token. Anyone who has the token can drive both paired browsers, so keep it out of logs and chat. To pair without the six-digit code, paste the 64 hex characters under Settings, then Advanced, then Daemon token.

Contributors

Page history