/ubrowser
Control a headless browser with 98% token reduction compared to Playwright MCP and Dev Browser. Uses batch execution, minimal responses, and efficient HTML formatting.
$ npx -y skills add Lulzx/ubrowser --skill ubrowser --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/ubrowser
Context preview
The summary Claude sees to decide when to auto-load this skill.
Control a headless browser with 98% token reduction compared to Playwright MCP and Dev Browser. Uses batch execution, minimal responses, and efficient HTML formatting.
SKILL.md
ubrowser.SKILL.mdμBrowser
Control a headless browser with 98% token reduction compared to Playwright MCP and Dev Browser. Uses batch execution, minimal responses, and efficient HTML formatting.
Setup
Start the ubrowser server before using browser tools:
./skills/ubrowser/server.sh &
Wait for "μBrowser MCP server started" message. First run installs dependencies and downloads Playwright Chromium.
Use `--headless` flag for headless mode:
./skills/ubrowser/server.sh --headless &
Key Optimization: Batch Execution
**Always prefer `browser_batch` for multi-step workflows.** This is the key to 98% cost savings.
Instead of:
browser_navigate → browser_type → browser_type → browser_click (4 calls, 4 snapshots)
Use:
{
"tool": "browser_batch",
"steps": [
{"tool": "navigate", "args": {"url": "/login"}},
{"tool": "type", "args": {"selector": "#email", "text": "user@test.com"}},
{"tool": "type", "args": {"selector": "#password", "text": "secret"}},
{"tool": "click", "args": {"selector": "button[type=submit]"}}
],
"snapshot": {"when": "final"}
}**Result: 1 call, 1 snapshot = 80%+ token reduction**
Available Tools
browser_navigate
Navigate to a URL.
{"url": "https://example.com"}browser_click
Click element by ref or selector.
{"ref": "e1"}
{"selector": "button.submit"}browser_type
Type text into input.
{"ref": "e2", "text": "hello@example.com", "clear": true, "pressEnter": true}browser_select
Select dropdown option.
{"selector": "#country", "label": "United States"}browser_scroll
Scroll page or element.
{"direction": "down", "amount": 500}
{"toBottom": true}browser_snapshot
Get interactive elements with refs (e1, e2, e3...).
{"scope": "#main", "format": "full"}browser_batch (KEY)
Execute multiple actions, snapshot only at end.
{
"steps": [
{"tool": "navigate", "args": {"url": "/search"}},
{"tool": "type", "args": {"selector": "input[name=q]", "text": "query"}},
{"tool": "click", "args": {"selector": "button[type=submit]"}}
],
"snapshot": {"when": "final", "scope": ".results"}
}browser_pages
Manage multiple browser pages.
{"action": "create", "name": "login"}
{"action": "switch", "name": "dashboard"}
{"action": "list"}
{"action": "close", "name": "login"}browser_inspect
Inspect specific element.
{"selector": ".form", "includeText": true, "depth": 3}Element References
Snapshots return elements with short refs:
<input id="e1" type="email" placeholder="Email">
<input id="e2" type="password">
<button id="e3">Sign In</button>
Use refs in subsequent commands: `{"ref": "e1", "text": "user@test.com"}`
Best Practices
1. **Always batch** - Use `browser_batch` for multi-step flows 2. **Request snapshots sparingly** - Default is no snapshot, add `snapshot: {include: true}` only when needed 3. **Scope snapshots** - Use `scope` parameter to limit to relevant DOM region 4. **Use refs** - Short IDs save tokens vs full selectors 5. **Use diff format** - After first snapshot, use `format: "diff"` for changes only
Cost Comparison (Opus 4.5)
| Approach | Per Task | Monthly (3000) | |----------|----------|----------------| | Playwright MCP | $3.28 | $9,827 | | μBrowser | $0.01 | $45 | | **Savings** | **$3.26** | **$9,782** |
Read more
μBrowser
Control a headless browser with 98% token reduction compared to Playwright MCP and Dev Browser. Uses batch execution, minimal responses, and efficient HTML formatting.
Setup
Start the ubrowser server before using browser tools:
./skills/ubrowser/server.sh &
Wait for "μBrowser MCP server started" message. First run installs dependencies and downloads Playwright Chromium.
Use `--headless` flag for headless mode:
./skills/ubrowser/server.sh --headless &
Key Optimization: Batch Execution
**Always prefer `browser_batch` for multi-step workflows.** This is the key to 98% cost savings.
Instead of:
browser_navigate → browser_type → browser_type → browser_click (4 calls, 4 snapshots)
Use:
{
"tool": "browser_batch",
"steps": [
{"tool": "navigate", "args": {"url": "/login"}},
{"tool": "type", "args": {"selector": "#email", "text": "user@test.com"}},
{"tool": "type", "args": {"selector": "#password", "text": "secret"}},
{"tool": "click", "args": {"selector": "button[type=submit]"}}
],
"snapshot": {"when": "final"}
}**Result: 1 call, 1 snapshot = 80%+ token reduction**
Available Tools
browser_navigate
Navigate to a URL.
{"url": "https://example.com"}browser_click
Click element by ref or selector.
{"ref": "e1"}
{"selector": "button.submit"}browser_type
Type text into input.
{"ref": "e2", "text": "hello@example.com", "clear": true, "pressEnter": true}browser_select
Select dropdown option.
{"selector": "#country", "label": "United States"}browser_scroll
Scroll page or element.
{"direction": "down", "amount": 500}
{"toBottom": true}browser_snapshot
Get interactive elements with refs (e1, e2, e3...).
{"scope": "#main", "format": "full"}browser_batch (KEY)
Execute multiple actions, snapshot only at end.
{
"steps": [
{"tool": "navigate", "args": {"url": "/search"}},
{"tool": "type", "args": {"selector": "input[name=q]", "text": "query"}},
{"tool": "click", "args": {"selector": "button[type=submit]"}}
],
"snapshot": {"when": "final", "scope": ".results"}
}browser_pages
Manage multiple browser pages.
{"action": "create", "name": "login"}
{"action": "switch", "name": "dashboard"}
{"action": "list"}
{"action": "close", "name": "login"}browser_inspect
Inspect specific element.
{"selector": ".form", "includeText": true, "depth": 3}Element References
Snapshots return elements with short refs:
<input id="e1" type="email" placeholder="Email"> <input id="e2" type="password"> <button id="e3">Sign In</button>
Use refs in subsequent commands: `{"ref": "e1", "text": "user@test.com"}`
Best Practices
1. **Always batch** - Use `browser_batch` for multi-step flows 2. **Request snapshots sparingly** - Default is no snapshot, add `snapshot: {include: true}` only when needed 3. **Scope snapshots** - Use `scope` parameter to limit to relevant DOM region 4. **Use refs** - Short IDs save tokens vs full selectors 5. **Use diff format** - After first snapshot, use `format: "diff"` for changes only
Cost Comparison (Opus 4.5)
| Approach | Per Task | Monthly (3000) | |----------|----------|----------------| | Playwright MCP | $3.28 | $9,827 | | μBrowser | $0.01 | $45 | | **Savings** | **$3.26** | **$9,782** |
Repo: Lulzx/ubrowser

