oasm-platform/open-asm/browser
Claude Code and agent skill by oasm-platform/open-asm
- community
Checking that the SKILL.md file is still in the repository.
Drive a real headless browser on the conversation's worker with `execute_remote_command` and `browser ...` commands. Covers JavaScript-heavy pages, logins, forms, clicks, tabs, iframes, cookies, storage, console and network logs. Load before testing a web app interactively.
Install
npx vskill@latest install oasm-platform/open-asm/browserSKILL.md
Browser
The worker has a headless Chromium. Each command is one execute_remote_command call whose command starts with browser . The command does not go through a shell, so pipes, ; and && do not work. Send one browser command per call.
Use retrieve_web_page for a static page you only need to read. Use the browser when the page needs JavaScript, a login, clicks or form input — and when the finding depends on what the page does with the response rather than what the server sent.
The browser is available on every worker and can load any site. A session follows redirects, iframes and popups to any host.
The one exception is a shared worker, which serves several workspaces. There the browser reaches only public addresses. Opening localhost, a private address such as 10.x or 192.168.x, or a host that resolves to one fails. Such requests from a page are listed under blocked (this worker is shared ...) in the command's output. To test an internal app, the user needs to connect a worker of their own.
Sessions
browser open https://app.example.comstarts a session. The first output line issession: b-<id>. The rest shows the page title, the URL and the interactive elements.- Pass that id to every later command:
browser -s b-<id> click @e3. Theidfield of the tool result is the id of that one command, not the browser session. Never pass it to-s. - Keep the id.
browser sessionsshows only how many sessions are open, never their ids, so a lost id means opening a new session. - A session ends after 10 minutes without commands, when the worker restarts, or when you run
browser -s b-<id> close. It also ends when its page stops responding: the command then fails withthe page stopped responding, so browser session ... was closed. Close a session when you are done, because a worker allows only 8 sessions at once. If a command reportsbrowser session ... not found, runbrowser openagain. - Each session has its own cookies and storage. Sessions do not share logins.
Two identities means two sessions. For an authorization test, one session per account (b-... for alice, b-... for bob), never two tabs in one session — tabs share cookies, so a second tab is the same user. Verify who is signed in from the app's own account UI before comparing anything, and keep the two outcomes separate in the evidence.
Snapshot and refs
snapshot prints the accessibility tree of the page. Each element you can act on gets a ref such as [ref=e5]. Use refs as targets: click @e5.
snapshot -ilists interactive elements only. This is the cheapest way to see what you can click.snapshotlists the full tree, including headings and text.snapshot -s <css>limits the tree to one region.snapshot -d 2limits the depth.
A ref is valid only for the page it came from. After a navigation, or when you see ref @eN not found, take a new snapshot. Actions such as click and fill print a single line. Run snapshot -i again to see what changed. A stale ref does not prove which element you are about to act on — re-snapshot and check.
A target can also be a CSS selector (#login), text=Sign in or xpath=//form//button.
Commands
All commands below take -s <id>. <t> is a target.
| Group | Commands | ||||
|---|---|---|---|---|---|
| Navigate | open <url>, back, forward, reload, url, title | ||||
| Look | snapshot [-i] [-d n] [-s css], get text [<t>], get html [<t>], get value <t>, get attr <t> <name>, get count <css>, get box <t>, `is visible\ | enabled\ | checked <t>` | ||
| Act | click <t> [--double] [--right], dblclick <t>, hover <t>, focus <t>, fill <t> "text" (replaces the value), type <t> "text" (appends with real keystrokes), press Enter / press Control+a, select <t> <value or label>..., check <t>, uncheck <t>, scroll down [px], scrollintoview <t>, drag <t> <t>, mouse move x y, mouse down, mouse up, mouse wheel dy | ||||
| Find | find role button --name "Sign in" click, find label Email fill "a@b.c", find placeholder Search, find text "Forgot password" | ||||
| Wait | wait <t> (until visible), wait 1000, wait --text "Welcome", wait --url /dashboard, wait --load or wait --load idle, wait --fn "window.appReady === true" | ||||
| JavaScript | eval "document.cookie", eval "const r = await fetch('/api/me'); return r.status" | ||||
| Tabs and frames | tab list, tab new [url], tab 1, tab close [n], frame <iframe t>, frame main | ||||
| Dialogs | Handled automatically: alerts and "leave this page?" prompts are accepted, confirm and prompt dialogs are dismissed. dialog accept ["prompt text"] and dialog dismiss change that policy. Handled dialogs appear in console. | ||||
| State | cookies, cookies set <name> <value> [--domain d] [--path p], cookies clear, `storage local\ | session [get k \ | set k v \ | clear]` | |
| Network | requests [--filter text] [--clear], set headers '{"X-Api-Key":"..."}', set credentials <user> <pass> (HTTP Basic), `set offline on\ | off` | |||
| Emulate | set viewport 390 844, set useragent "...", set media dark, set geo 10.77 106.69 | ||||
| Debug | console [--clear], errors [--clear] |
Quote any argument that contains spaces, and any ;, | or && that is part of a value. A command fails after 30 seconds by default. Set another limit with --timeout <ms> before the subcommand, up to 55000.
What the browser is for
- Reaching the part of the app a request cannot: JavaScript-rendered routes, SPA state, multi-step wizards, client-side validation, file pickers.
- Reading what the client does:
requestsfor the calls the page actually made (endpoints and parameters you would never guess),consoleanderrorsfor leaked internals,evalfor storage, tokens and feature flags. - Proving DOM and stored XSS where execution depends on a real render.
- Reproducing a flow exactly as a user would, so the evidence is a flow and not a rail of hand-built requests.
Rules
- Never invent credentials. Use only credentials the user or the task gave you.
- Never spray payloads through the browser. Trial-heavy work belongs in a script over
execute_remote_command; the browser is for flows that need a real render. - Close sessions when done; a worker holds only 8.
- A blocked or failed request from a page, a proxy error page, or a WAF interstitial is not target behaviour and not evidence.
Example: log in, capture the API, test one object
Then test the object ids that requests revealed with curl from a second identity, and keep both sessions' outcomes separate.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingcore-api/src/modules/agents/skills/browser/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/oasm-platform/open-asm/browser)