# Browser Automation

Drives a real browser for signed-in sites, forms, screenshots, and web QA.

- Repository: https://github.com/code-yeongyu/oh-my-openagent (70577 stars)
- Category: Testing
- License: see repository
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add code-yeongyu/oh-my-openagent --skill browser -g -a claude-code -y`
Codex: `npx skills add code-yeongyu/oh-my-openagent --skill browser -g -a codex -y`
Cursor: `npx skills add code-yeongyu/oh-my-openagent --skill browser -g -a cursor -y`
Gemini CLI: `npx skills add code-yeongyu/oh-my-openagent --skill browser -g -a gemini-cli -y`

## Description

Drives a real browser through the omowright library from the js eval kernel: sites the user is already signed into, forms and clicks, JS-rendered pages, screenshots, web QA, extension popups, a human handoff for login, CAPTCHA or OTP, and a browser you own for scraping, bot-scored targets, network capture and QA traces. Use for any interactive browser task; not for a plain search or an unblocked static fetch.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Browser

One library, two engines. omowright ships inside this skill; choose the engine before you act:

| You need | Engine | Entry point |
|---|---|---|
| A site the user is signed into, their open tabs, a form, a click-through, a screenshot, web QA, an extension popup | **attached**, the user's own browser through BrowserSkill | `connectBrowserSkill()` |
| A throwaway profile, bot-scoring evasion, a CAPTCHA, network interception, a QA flight trace, coordinate control, headless runs | **owned**, a browser your code launches | `connectPipe()` / `connectCloakProfile()`, [references/owned-engine/README.md](references/owned-engine/README.md) |
| A 403/WAF host the attached engine cannot open, a platform with a native reader, an archive snapshot | neither | the `ultimate-browsing` skill |

**Attached is the default,** because it is the only engine carrying the user's logins and the only
one where a human is a single call away. Never substitute one engine for the other silently: if
the attached engine is not set up, run the onboarding script and tell the user its one remaining
step.

## Step 0, inside OmO Desktop: everything above, plus the app's built-in browser

When `OMO_BROWSER_ENGINE` is set (the OmO desktop app sets it for every session), everything above works exactly
as in the terminal: `connectBrowserSkill()` for the user's own browser, `connectPipe()` / `connectCloakProfile()` /
`connect()` for a browser of your own, with the same table to choose between them. The app adds one more option:

| Option | What it is | Use it when |
|---|---|---|
| `connectBuiltinBrowser()` | OmO's built-in browser for this thread: the tab the user sees beside the chat, which they can watch, take over and share | the user should see the page while you work, the task is QA of something in the app, or a sign-in the user should do themselves in a visible tab |

The rest: https://github.com/code-yeongyu/oh-my-openagent/blob/HEAD/packages/shared-skills/skills/browser/SKILL.md
