browser
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 c…
Install / Use
npx skills add code-yeongyu/oh-my-openagent --skill browserInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Our assessment of browser
browser scores 97/100 on our quality scale, 147th of 4,648 Development & Engineering skills we index (top 4%).
Its SKILL.md is 6.8 KB long, split into 6 sections with 4 code examples: a thorough specification that gives an agent plenty to work with.
With 69,362 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated about 2 months ago, so browser is actively maintained.
- Our last check on 2026-10-23 found the source still online.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 88/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.
AI review by kimi-k2.7-code on 2026-09-25. Automated pattern scan on 2026-09-25. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
browser compared with similar skills
All 4 of these similar skills score higher than browser; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| browser (this skill)by code-yeongyu | 97 | 69.4k | 45d ago | SKILL.md |
| taste-skillby Leonxlnx | 100 | 112.0k | 1d ago | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 110.3k | 1d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 79.1k | today | CLAUDE.md |
| ai-job-searchby ai-job-search-dev | 100 | 70.5k | today | CLAUDE.md |
Frequently asked questions
- How do I install browser?
- Run
npx skills add code-yeongyu/oh-my-openagent --skill browser. The install tabs above show the steps for each supported agent. - Which AI agents does browser work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is browser safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It declares no license and scores 88/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is browser still maintained?
- The repository was last updated about 2 months ago, so browser is actively maintained.
Skill content
View source on GitHubname: browser 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."
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 |
| Text out of a URL, a 403 bypass, a platform that blocks fetchers | 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 — load omowright and prove the stack
const { loadOmowright } = await import("<skill-root>/scripts/omowright.mjs")
const { omowright } = await loadOmowright() // { connectBrowserSkill, bskSnapshot, connectPipe, ... }
node "<skill-root>/scripts/browser-doctor.mjs" --json
| State | Meaning | Next |
|---|---|---|
| ready | CLI, daemon and a connected browser | start a session |
| no-cli / no-daemon / no-extension | something is missing | node "<skill-root>/scripts/browser-install.mjs" [--browser=<id>] prepares everything it can for the browser the user uses, then prints the single step only the user can do (relaunch that browser and click Enable); relay it verbatim, wait, re-run the doctor |
| choose-browser | the signals do not single out one browser (Safari/Firefox default, an idle default while another browser runs, several in use) | nothing was installed; take the browser from memory or ask the user, then browser-install.mjs --browser=<id> |
| no-browser-support | no Chromium-family profile on this machine | say so and stop |
Install into the browser the user actually uses, never into whatever happens to be on disk. Before
installing, check your memory for the user's browser; otherwise read the doctor's browser (picked
from the OS default browser, running apps and recent use — candidates shows the evidence). If memory
and the doctor disagree, or the doctor says choose-browser, ask the user. Pass the answer as
--browser=<id> and record it in memory. A Chrome that is merely installed is not their browser.
Never launch a headless browser because the attached one is missing. It has none of the user's sessions, so every login turns into a ladder you should not be climbing. Say which state you hit and ask.
The loop (attached)
const session = await omowright.connectBrowserSkill({ name: "<task>", focused: false })
try {
await session.navigate("https://example.com/", { waitUntil: "load" })
const { tree, refs, css } = await omowright.bskSnapshot(session, { interactive: true }) // OmOWright tree + refs, no trace in the page
await session.click({ selector: css.e3 }) // css[ref] is null inside shadow roots:
const vom = await session.observe({ maxTokens: 4000 }) // then read the daemon's own tree ...
await session.click("@e7") // ... and click its @eN ref
await session.fill(css.e5, "hello")
await session.press("Enter")
await session.waitForNavigation({ waitUntil: "load" })
const shot = await session.screenshot() // { buffer, width, height, captureId }
} finally {
await session.stop() // success AND failure; returns borrowed tabs
}
- Read before every action.
bskSnapshotrefs andobserve@eNrefs are reissued on each call; use a ref in the same cycle you read it. - Navigation and large DOM changes stale every ref. Read again rather than reusing.
- Two identical failures mean change approach, not retry. A third identical attempt is a defect.
- Borrow a user tab explicitly (
tabList({ scope: "user" }),tabBorrow(id),tabReturn(id)). Borrowing prompts the user; never invent tab ids and never repeat a denied borrow. - Always
stop()the session, on success and on failure.
Every method, its options, and the failure codes are in references/commands.md.
When a human is the only way through
Login, CAPTCHA, OTP, a payment confirmation, a consent dialog:
const outcome = await session.requestHelp({ prompt: "<what you need done>", targets: ["@e4"], timeoutMs: 300_000 })
Then read the page again. Respect a cancelled or timed_out outcome; do not work around it by
changing the extension's automation settings.
Rules
- Never read credentials through the page. No
evaluatethat extracts a password, token, cookie or recovery code. The value of the attached engine is that the browser is already signed in. - Never clear cookies, cache or site data. It is the user's real profile; clearing it logs them out everywhere. No flow here needs it.
focused: falseby default. The browser belongs to someone who is probably using it.- One short, named session per task, always stopped.
- Bot-scored or WAF targets go to the owned engine. The attached engine's daemon enables console
capture on every tab it drives, which is a known automation signal; CloakBrowser through
connectCloakProfile()is the stealth path.
Where the rest lives
| Topic | Read | |---|---| | Session methods, targets, options, error codes | references/commands.md | | Installing: CLI, daemon, extension, the one human step, blocklisted extension | references/install.md | | Agent on one machine, browser on another | references/remote.md | | Owned engine: launch, snapshot ladder, network, frames, human handoff | references/owned-engine/README.md | | Reading a 1Password vault the user has unlocked | references/recipes/1password.md |
Related Skills
taste-skill
112.0kAgent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages
Agent-Reach
110.3kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
79.1kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
ai-job-search
70.5kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
