Skip to content
Development
Skill

/browser-use

Drive agentglass's built-in browser — the one already signed in to the sites this project uses. Use when a task needs a page behind a login (a dashboard, a ticket, a staging app), when a URL fetched with curl comes back signed out or JavaScript-rendered, or when the user asks

From plugin
agentglass
3453 skills8 hooks

Claude Code

$ npx -y skills add SirAllap/agentglass --skill browser-use --agent claude-code

SKILL.md

browser-use.SKILL.md
name: browser-use
description: Drive agentglass's built-in browser — the one already signed in to the sites this project uses. Use when a task needs a page behind a login (a dashboard, a ticket, a staging app), when a URL fetched with curl comes back signed out or JavaScript-rendered, or when the user asks you to look at, click through, or screenshot something in a browser. It is a full browser for agents: DevTools, fake network responses, isolated profiles, a virtual clock.

Using the built-in browser

`curl` gets you the signed-out version of everything that matters, because the session lives in a browser. agentglass has one, already signed in to whatever the person using it is signed in to. `agentglass-browser` drives it, and it is built for you rather than lent to you: the whole DevTools protocol is here, so is running JavaScript, so is faking a broken API.

Start here, in this order

agentglass-browser health                     # is anything listening; always answers
agentglass-browser open https://example.com/app
agentglass-browser observe --shot             # EVERYTHING at once

`observe` is the verb to reach for first. One answer with the url and title, whether the view is **visible and focused**, the console and the network since last time, a tree of the interactive page addressed by role and accessible name, the current value of every input, and optionally the picture. Polling six verbs in turn is where the time goes.

After the first look, ask for **only what changed**:

agentglass-browser observe --delta            # {delta:true, added, removed, changed, same, console, network}
agentglass-browser click e12 --observe        # `after` is a delta too

`added` are whole nodes, `removed` are ids gone from the page, `unlisted` are ids still there but past the tree's cap, `changed` is `{e, field: new value}` (null = the field went away), `same` is how many did not move. New console and network rows only. `form`, `storage` and `viewport` appear only when they changed — **absent means unchanged**. Positions (`at`) are not diffed. After a navigation, with no earlier look, or after a look you only saw part of (`--max-tokens`, `--summary`), you get the full answer with `delta:false` and a `reason`. Plain `observe` is always the full page.

A page that is mostly below the fold or a menu you already know the id of does not need the whole tree:

agentglass-browser observe --viewport         # only what is on screen; `outOfView` counts the rest
agentglass-browser observe --root e12         # only the subtree of e12 (refused if e12 is gone)

Both are looks at a part: they are not a baseline, so they neither replace nor break the one `--delta` is measured against, and they cannot be combined with it. Unnamed layout wrappers (`role` presentation/none/generic with no name, id or test id) are left out of every tree, counted in `wrappers`, and an empty `name` is not written.

The baseline (and `checkup`'s "since your last checkup") is kept per `--as` name; callers without one share a single baseline, so pass `--as` to get your own.

`click` and `press` wait for what they caused (the navigation, or a quiet page with no request in flight, capped at 1 s) and answer with an `effect`: `navigated`, `newDocument`, `newErrors`, `failedRequests`, `dialog`, `settledBy`. Often that is all you need to know — no look at all.

Did it break? One call

The edit → reload → "is it broken?" loop is one verb:

agentglass-browser checkup http://localhost:5173/   # load it, wait for quiet, report
agentglass-browser checkup --reload                 # after your edit
agentglass-browser checkup                          # no navigation: since your last checkup

The first field is the verdict, `ok` or `N problems`. Problems are uncaught exceptions and console errors — **including the ones thrown while the page loaded**, which `console` and `observe` cannot see — failed requests (4xx/5xx, CORS, blocked) and visible error text (`role=alert`, so an alert toast counts). Chromium's `issues`, `perf` (LCP, CLS) and `a11y` (unlabelled controls, with ids) come along as advice and do not count. A screenshot path only when something failed (`--no-shot` to skip; `shot: "unavailable: …"` when there is no frame to take).

Then the whole interaction in ONE call

agentglass-browser do "click #save" "wait #done" --observe

Starting this process costs ~69 ms before it says a word, so six separate verbs spend most of a second on startup alone. `do` spends it once. Measured: **618 ms → 94 ms** for six verbs. Steps stop at the first failure, which comes back with its own console errors and failed requests.

Every round you spend re-reads everything above it, so the count of calls is the cost. Three rules:

1. **Act, wait for the end state and look, in ONE call.** A form is one `fill --field e3=... --field e4=... --submit --observe`; a click that should lead somewhere is `do "click e9" "wait #done" --observe`. Do not split an action from the look that checks it. 2. **Trust the receipt.** `click` and `press` already say whether the page navigated, errored, opened a dialog or opened a tab (`effect.popups`: `[{page, url}]`, so the next call is `--page <page>`), and `--observe` already shows the page after. `fill` names any field the page changed from what you typed (`changedByPage`); no entry means every value took. Do not observe again to confirm what the answer just told you; look again only when it says something you did not expect. An act waits up to 3 s for its selector to appear and for a passing overlay to clear, so do not `wait` before a click on something that is about to render. An id the page re-rendered is refused with the id that replaced it (`... is now e43`): repeat the call with that one. 3. **Stop when the result is on the page.** The task is done the moment the page shows it (a confirmation, the new URL, the sa

Read more
@sirallap
Ships withagentglass

🛰 Every AI coding agent on your machine, on one screen — live cost, tokens and tool calls across every provider, and a hold on anything dangerous until you say go. From your desk or your phone.

Stars on GitHub

Momentum

stars in total
345
Star history of SirAllap/agentglass on GitHub, a chart by star-history.com

Other skills on agentglass.

orchestrator

orchestrator

Use when somebody asks for an orchestrator, a lead agent, a coordinator, or somebody to "keep an eye on" the agents working on a…

@sirallap@sirallapInstall Skill
ui-control

ui-control

Open a panel in agentglass's own window, read what is open, or read and change one of its settings. Use when the person asks you…

@sirallap@sirallapInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills11d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react2d252k
@facebook@facebookInstall Skill

Questions about browser-use.

Which coding agents can use browser-use?
browser-use installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.