@ulpi/browse 2.3.3 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/dist/browse.cjs +3445 -1636
- package/dist/lib.mjs +29504 -0
- package/dist/types/a11y.d.ts +32 -0
- package/dist/types/a11y.d.ts.map +1 -0
- package/dist/types/app/android/bridge.d.ts +41 -0
- package/dist/types/app/android/bridge.d.ts.map +1 -0
- package/dist/types/app/android/emulator.d.ts +32 -0
- package/dist/types/app/android/emulator.d.ts.map +1 -0
- package/dist/types/app/android/manager.d.ts +62 -0
- package/dist/types/app/android/manager.d.ts.map +1 -0
- package/dist/types/app/android/protocol.d.ts +162 -0
- package/dist/types/app/android/protocol.d.ts.map +1 -0
- package/dist/types/app/android/sim-service.d.ts +33 -0
- package/dist/types/app/android/sim-service.d.ts.map +1 -0
- package/dist/types/app/index.d.ts +15 -0
- package/dist/types/app/index.d.ts.map +1 -0
- package/dist/types/app/ios/bridge.d.ts +53 -0
- package/dist/types/app/ios/bridge.d.ts.map +1 -0
- package/dist/types/app/ios/controller.d.ts +131 -0
- package/dist/types/app/ios/controller.d.ts.map +1 -0
- package/dist/types/app/ios/manager.d.ts +96 -0
- package/dist/types/app/ios/manager.d.ts.map +1 -0
- package/dist/types/app/ios/protocol.d.ts +122 -0
- package/dist/types/app/ios/protocol.d.ts.map +1 -0
- package/dist/types/app/ios/sim-service.d.ts +37 -0
- package/dist/types/app/ios/sim-service.d.ts.map +1 -0
- package/dist/types/app/macos/bridge.d.ts +22 -0
- package/dist/types/app/macos/bridge.d.ts.map +1 -0
- package/dist/types/app/manager.d.ts +50 -0
- package/dist/types/app/manager.d.ts.map +1 -0
- package/dist/types/app/normalize.d.ts +27 -0
- package/dist/types/app/normalize.d.ts.map +1 -0
- package/dist/types/app/resolve-app.d.ts +31 -0
- package/dist/types/app/resolve-app.d.ts.map +1 -0
- package/dist/types/app/types.d.ts +77 -0
- package/dist/types/app/types.d.ts.map +1 -0
- package/dist/types/automation/action-context.d.ts +110 -0
- package/dist/types/automation/action-context.d.ts.map +1 -0
- package/dist/types/automation/command.d.ts +138 -0
- package/dist/types/automation/command.d.ts.map +1 -0
- package/dist/types/automation/events.d.ts +72 -0
- package/dist/types/automation/events.d.ts.map +1 -0
- package/dist/types/automation/executor.d.ts +39 -0
- package/dist/types/automation/executor.d.ts.map +1 -0
- package/dist/types/automation/index.d.ts +11 -0
- package/dist/types/automation/index.d.ts.map +1 -0
- package/dist/types/automation/registry.d.ts +38 -0
- package/dist/types/automation/registry.d.ts.map +1 -0
- package/dist/types/automation/rules.d.ts +52 -0
- package/dist/types/automation/rules.d.ts.map +1 -0
- package/dist/types/automation/target.d.ts +76 -0
- package/dist/types/automation/target.d.ts.map +1 -0
- package/dist/types/browser/consent.d.ts +13 -0
- package/dist/types/browser/consent.d.ts.map +1 -0
- package/dist/types/browser/cookie-import.d.ts +94 -0
- package/dist/types/browser/cookie-import.d.ts.map +1 -0
- package/dist/types/browser/detection.d.ts +22 -0
- package/dist/types/browser/detection.d.ts.map +1 -0
- package/dist/types/browser/emulation.d.ts +30 -0
- package/dist/types/browser/emulation.d.ts.map +1 -0
- package/dist/types/browser/events.d.ts +19 -0
- package/dist/types/browser/events.d.ts.map +1 -0
- package/dist/types/browser/index.d.ts +17 -0
- package/dist/types/browser/index.d.ts.map +1 -0
- package/dist/types/browser/macros.d.ts +9 -0
- package/dist/types/browser/macros.d.ts.map +1 -0
- package/dist/types/browser/manager.d.ts +272 -0
- package/dist/types/browser/manager.d.ts.map +1 -0
- package/dist/types/browser/png-compare.d.ts +36 -0
- package/dist/types/browser/png-compare.d.ts.map +1 -0
- package/dist/types/browser/profiles.d.ts +29 -0
- package/dist/types/browser/profiles.d.ts.map +1 -0
- package/dist/types/browser/react-devtools.d.ts +75 -0
- package/dist/types/browser/react-devtools.d.ts.map +1 -0
- package/dist/types/browser/readiness.d.ts +19 -0
- package/dist/types/browser/readiness.d.ts.map +1 -0
- package/dist/types/browser/refs.d.ts +70 -0
- package/dist/types/browser/refs.d.ts.map +1 -0
- package/dist/types/browser/serp.d.ts +16 -0
- package/dist/types/browser/serp.d.ts.map +1 -0
- package/dist/types/browser/snapshot-window.d.ts +31 -0
- package/dist/types/browser/snapshot-window.d.ts.map +1 -0
- package/dist/types/browser/snapshot.d.ts +41 -0
- package/dist/types/browser/snapshot.d.ts.map +1 -0
- package/dist/types/browser/tabs.d.ts +67 -0
- package/dist/types/browser/tabs.d.ts.map +1 -0
- package/dist/types/browser/target.d.ts +106 -0
- package/dist/types/browser/target.d.ts.map +1 -0
- package/dist/types/browser/youtube.d.ts +26 -0
- package/dist/types/browser/youtube.d.ts.map +1 -0
- package/dist/types/cli.d.ts +14 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cloud/auth.d.ts +80 -0
- package/dist/types/cloud/auth.d.ts.map +1 -0
- package/dist/types/cloud/docker.d.ts +76 -0
- package/dist/types/cloud/docker.d.ts.map +1 -0
- package/dist/types/cloud/firecracker.d.ts +142 -0
- package/dist/types/cloud/firecracker.d.ts.map +1 -0
- package/dist/types/cloud/golden-snapshot.d.ts +122 -0
- package/dist/types/cloud/golden-snapshot.d.ts.map +1 -0
- package/dist/types/cloud/index.d.ts +26 -0
- package/dist/types/cloud/index.d.ts.map +1 -0
- package/dist/types/cloud/orchestrator-interface.d.ts +63 -0
- package/dist/types/cloud/orchestrator-interface.d.ts.map +1 -0
- package/dist/types/cloud/orchestrator.d.ts +58 -0
- package/dist/types/cloud/orchestrator.d.ts.map +1 -0
- package/dist/types/cloud/proxy.d.ts +34 -0
- package/dist/types/cloud/proxy.d.ts.map +1 -0
- package/dist/types/cloud/reaper.d.ts +49 -0
- package/dist/types/cloud/reaper.d.ts.map +1 -0
- package/dist/types/cloud/server.d.ts +19 -0
- package/dist/types/cloud/server.d.ts.map +1 -0
- package/dist/types/cloud/sessions.d.ts +85 -0
- package/dist/types/cloud/sessions.d.ts.map +1 -0
- package/dist/types/cloud/vm-orchestrator.d.ts +133 -0
- package/dist/types/cloud/vm-orchestrator.d.ts.map +1 -0
- package/dist/types/cloud/vm-warm-pool.d.ts +104 -0
- package/dist/types/cloud/vm-warm-pool.d.ts.map +1 -0
- package/dist/types/cloud/warm-pool.d.ts +85 -0
- package/dist/types/cloud/warm-pool.d.ts.map +1 -0
- package/dist/types/cloud/ws.d.ts +61 -0
- package/dist/types/cloud/ws.d.ts.map +1 -0
- package/dist/types/commands/meta/auth.d.ts +6 -0
- package/dist/types/commands/meta/auth.d.ts.map +1 -0
- package/dist/types/commands/meta/flows.d.ts +15 -0
- package/dist/types/commands/meta/flows.d.ts.map +1 -0
- package/dist/types/commands/meta/index.d.ts +14 -0
- package/dist/types/commands/meta/index.d.ts.map +1 -0
- package/dist/types/commands/meta/inspection.d.ts +7 -0
- package/dist/types/commands/meta/inspection.d.ts.map +1 -0
- package/dist/types/commands/meta/profile.d.ts +11 -0
- package/dist/types/commands/meta/profile.d.ts.map +1 -0
- package/dist/types/commands/meta/recording.d.ts +7 -0
- package/dist/types/commands/meta/recording.d.ts.map +1 -0
- package/dist/types/commands/meta/screenshots.d.ts +7 -0
- package/dist/types/commands/meta/screenshots.d.ts.map +1 -0
- package/dist/types/commands/meta/sessions.d.ts +7 -0
- package/dist/types/commands/meta/sessions.d.ts.map +1 -0
- package/dist/types/commands/meta/sim.d.ts +10 -0
- package/dist/types/commands/meta/sim.d.ts.map +1 -0
- package/dist/types/commands/meta/system.d.ts +8 -0
- package/dist/types/commands/meta/system.d.ts.map +1 -0
- package/dist/types/commands/meta/tabs.d.ts +6 -0
- package/dist/types/commands/meta/tabs.d.ts.map +1 -0
- package/dist/types/commands/meta/youtube.d.ts +7 -0
- package/dist/types/commands/meta/youtube.d.ts.map +1 -0
- package/dist/types/commands/read.d.ts +16 -0
- package/dist/types/commands/read.d.ts.map +1 -0
- package/dist/types/commands/write.d.ts +17 -0
- package/dist/types/commands/write.d.ts.map +1 -0
- package/dist/types/config.d.ts +101 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/constants.d.ts +36 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/detection/frameworks.d.ts +27 -0
- package/dist/types/detection/frameworks.d.ts.map +1 -0
- package/dist/types/detection/index.d.ts +64 -0
- package/dist/types/detection/index.d.ts.map +1 -0
- package/dist/types/detection/infrastructure.d.ts +82 -0
- package/dist/types/detection/infrastructure.d.ts.map +1 -0
- package/dist/types/detection/saas.d.ts +39 -0
- package/dist/types/detection/saas.d.ts.map +1 -0
- package/dist/types/enable.d.ts +10 -0
- package/dist/types/enable.d.ts.map +1 -0
- package/dist/types/engine/chrome.d.ts +45 -0
- package/dist/types/engine/chrome.d.ts.map +1 -0
- package/dist/types/engine/index.d.ts +9 -0
- package/dist/types/engine/index.d.ts.map +1 -0
- package/dist/types/engine/providers.d.ts +36 -0
- package/dist/types/engine/providers.d.ts.map +1 -0
- package/dist/types/engine/resolver.d.ts +36 -0
- package/dist/types/engine/resolver.d.ts.map +1 -0
- package/dist/types/expect.d.ts +68 -0
- package/dist/types/expect.d.ts.map +1 -0
- package/dist/types/export/index.d.ts +8 -0
- package/dist/types/export/index.d.ts.map +1 -0
- package/dist/types/export/record.d.ts +28 -0
- package/dist/types/export/record.d.ts.map +1 -0
- package/dist/types/export/replay.d.ts +9 -0
- package/dist/types/export/replay.d.ts.map +1 -0
- package/dist/types/flow-parser.d.ts +32 -0
- package/dist/types/flow-parser.d.ts.map +1 -0
- package/dist/types/install-skill.d.ts +8 -0
- package/dist/types/install-skill.d.ts.map +1 -0
- package/dist/types/lib.d.ts +27 -0
- package/dist/types/lib.d.ts.map +1 -0
- package/dist/types/mcp/index.d.ts +10 -0
- package/dist/types/mcp/index.d.ts.map +1 -0
- package/dist/types/mcp/server.d.ts +9 -0
- package/dist/types/mcp/server.d.ts.map +1 -0
- package/dist/types/mcp/tools/index.d.ts +36 -0
- package/dist/types/mcp/tools/index.d.ts.map +1 -0
- package/dist/types/network/buffers.d.ts +53 -0
- package/dist/types/network/buffers.d.ts.map +1 -0
- package/dist/types/network/har.d.ts +10 -0
- package/dist/types/network/har.d.ts.map +1 -0
- package/dist/types/network/index.d.ts +6 -0
- package/dist/types/network/index.d.ts.map +1 -0
- package/dist/types/perf-audit/diff.d.ts +43 -0
- package/dist/types/perf-audit/diff.d.ts.map +1 -0
- package/dist/types/perf-audit/dom-analysis.d.ts +74 -0
- package/dist/types/perf-audit/dom-analysis.d.ts.map +1 -0
- package/dist/types/perf-audit/formatter.d.ts +34 -0
- package/dist/types/perf-audit/formatter.d.ts.map +1 -0
- package/dist/types/perf-audit/index.d.ts +128 -0
- package/dist/types/perf-audit/index.d.ts.map +1 -0
- package/dist/types/perf-audit/persist.d.ts +40 -0
- package/dist/types/perf-audit/persist.d.ts.map +1 -0
- package/dist/types/perf-audit/recommendations.d.ts +18 -0
- package/dist/types/perf-audit/recommendations.d.ts.map +1 -0
- package/dist/types/perf-audit/resource-analyzer.d.ts +46 -0
- package/dist/types/perf-audit/resource-analyzer.d.ts.map +1 -0
- package/dist/types/perf-audit/web-vitals.d.ts +73 -0
- package/dist/types/perf-audit/web-vitals.d.ts.map +1 -0
- package/dist/types/proxy/index.d.ts +6 -0
- package/dist/types/proxy/index.d.ts.map +1 -0
- package/dist/types/proxy/pool.d.ts +44 -0
- package/dist/types/proxy/pool.d.ts.map +1 -0
- package/dist/types/proxy/providers.d.ts +32 -0
- package/dist/types/proxy/providers.d.ts.map +1 -0
- package/dist/types/sdk/client.d.ts +37 -0
- package/dist/types/sdk/client.d.ts.map +1 -0
- package/dist/types/sdk/index.d.ts +17 -0
- package/dist/types/sdk/index.d.ts.map +1 -0
- package/dist/types/sdk/session.d.ts +95 -0
- package/dist/types/sdk/session.d.ts.map +1 -0
- package/dist/types/sdk/transports/cloud.d.ts +89 -0
- package/dist/types/sdk/transports/cloud.d.ts.map +1 -0
- package/dist/types/sdk/transports/index.d.ts +3 -0
- package/dist/types/sdk/transports/index.d.ts.map +1 -0
- package/dist/types/sdk/transports/local.d.ts +56 -0
- package/dist/types/sdk/transports/local.d.ts.map +1 -0
- package/dist/types/sdk.d.ts +35 -0
- package/dist/types/sdk.d.ts.map +1 -0
- package/dist/types/security/auth-vault.d.ts +32 -0
- package/dist/types/security/auth-vault.d.ts.map +1 -0
- package/dist/types/security/domain-filter.d.ts +31 -0
- package/dist/types/security/domain-filter.d.ts.map +1 -0
- package/dist/types/security/index.d.ts +10 -0
- package/dist/types/security/index.d.ts.map +1 -0
- package/dist/types/security/policy.d.ts +20 -0
- package/dist/types/security/policy.d.ts.map +1 -0
- package/dist/types/security/sanitize.d.ts +6 -0
- package/dist/types/security/sanitize.d.ts.map +1 -0
- package/dist/types/server.d.ts +13 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/types/session/concurrency.d.ts +28 -0
- package/dist/types/session/concurrency.d.ts.map +1 -0
- package/dist/types/session/encryption.d.ts +8 -0
- package/dist/types/session/encryption.d.ts.map +1 -0
- package/dist/types/session/index.d.ts +7 -0
- package/dist/types/session/index.d.ts.map +1 -0
- package/dist/types/session/manager.d.ts +110 -0
- package/dist/types/session/manager.d.ts.map +1 -0
- package/dist/types/session/persist.d.ts +87 -0
- package/dist/types/session/persist.d.ts.map +1 -0
- package/dist/types/session/tab-lock.d.ts +26 -0
- package/dist/types/session/tab-lock.d.ts.map +1 -0
- package/dist/types/session/target-factory.d.ts +88 -0
- package/dist/types/session/target-factory.d.ts.map +1 -0
- package/dist/types/sim-cli.d.ts +8 -0
- package/dist/types/sim-cli.d.ts.map +1 -0
- package/dist/types/types.d.ts +45 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/visual.d.ts +79 -0
- package/dist/types/visual.d.ts.map +1 -0
- package/package.json +22 -3
- package/skill/browse/SKILL.md +286 -0
- package/skill/{references → browse/references}/commands.md +203 -18
- package/skill/browse-aeo/SKILL.md +148 -0
- package/skill/browse-config/SKILL.md +200 -0
- package/skill/browse-geo/SKILL.md +225 -0
- package/skill/browse-qa/SKILL.md +143 -0
- package/skill/browse-seo/SKILL.md +188 -0
- package/skill/browse-stealth/SKILL.md +246 -0
- package/skill/SKILL.md +0 -496
- /package/skill/{references → browse/references}/guides.md +0 -0
- /package/skill/{references → browse/references}/permissions.md +0 -0
package/skill/SKILL.md
DELETED
|
@@ -1,496 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: browse
|
|
3
|
-
version: 3.5.0
|
|
4
|
-
description: |
|
|
5
|
-
Fast web browsing and web app testing for AI coding agents via persistent headless Chromium daemon.
|
|
6
|
-
Browse any URL, read page content, click elements, fill forms, run JavaScript, take screenshots,
|
|
7
|
-
inspect CSS/DOM, capture console/network logs, and more. Ideal for verifying local dev servers,
|
|
8
|
-
testing UI changes, and validating web app behavior end-to-end. ~100ms per command after
|
|
9
|
-
first call. Works with Claude Code, Cursor, Cline, Windsurf, and any agent that can run Bash.
|
|
10
|
-
No MCP, no Chrome extension — just fast CLI.
|
|
11
|
-
allowed-tools:
|
|
12
|
-
- Bash
|
|
13
|
-
- Read
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
# browse: Persistent Browser for AI Coding Agents
|
|
18
|
-
|
|
19
|
-
Persistent headless Chromium daemon. First call auto-starts the server (~3s).
|
|
20
|
-
Every subsequent call: ~100-200ms. Auto-shuts down after 30 min idle.
|
|
21
|
-
|
|
22
|
-
## SETUP
|
|
23
|
-
|
|
24
|
-
Before using browse, confirm the CLI is installed:
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
browse --version
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
If not installed, tell the user:
|
|
31
|
-
|
|
32
|
-
> `browse` CLI is not installed. Install it with:
|
|
33
|
-
>
|
|
34
|
-
> ```bash
|
|
35
|
-
> npm install -g @ulpi/browse
|
|
36
|
-
> ```
|
|
37
|
-
|
|
38
|
-
**Do NOT install anything automatically.** Wait for the user to confirm they have installed it before proceeding.
|
|
39
|
-
|
|
40
|
-
### Permissions (optional)
|
|
41
|
-
|
|
42
|
-
To avoid being prompted on every browse command, tell the user they can pre-allow browse commands. Read [references/permissions.md](references/permissions.md) for the full permission list to add to `.claude/settings.json`.
|
|
43
|
-
|
|
44
|
-
**Do NOT modify settings files automatically.** Show the user the permissions and let them decide whether to add them.
|
|
45
|
-
|
|
46
|
-
## IMPORTANT
|
|
47
|
-
|
|
48
|
-
- Always call `browse` as a bare command (it's on PATH via global install).
|
|
49
|
-
- Do NOT use shell variables like `B=...` or full paths — they break Claude Code's permission matching.
|
|
50
|
-
- NEVER use `#` in CSS selectors — use `[id=foo]` instead of `#foo`. The `#` character breaks Claude Code's permission matching and triggers approval prompts.
|
|
51
|
-
- After `goto`, always run `browse wait --network-idle` before reading content or taking screenshots. Pages with dynamic content, SPAs, and lazy-loaded assets need time to fully render.
|
|
52
|
-
- Screenshots MUST be saved to `.browse/sessions/default/` (or `.browse/sessions/<session-id>/` when using `--session`). Use descriptive filenames like `browse screenshot .browse/sessions/default/homepage.png`. NEVER save screenshots to `/tmp` or any other location.
|
|
53
|
-
- The browser persists between calls — cookies, tabs, and state carry over.
|
|
54
|
-
- The server auto-starts on first command. No manual setup needed.
|
|
55
|
-
- Use `--session <id>` for parallel agent isolation. Each session gets its own tabs, refs, cookies.
|
|
56
|
-
- Use `--context` for state changes, `--context delta` for ARIA diff with refs, `--context full` for complete snapshot with refs after write commands.
|
|
57
|
-
- Use `--json` for structured output (`{success, data, command}`).
|
|
58
|
-
- Use `--content-boundaries` for prompt injection defense when reading untrusted pages.
|
|
59
|
-
- Use `--allowed-domains domain1,domain2` to restrict navigation to trusted sites.
|
|
60
|
-
- If you hit CAPTCHA/MFA after 2-3 failures, read [references/guides.md](references/guides.md) for the mandatory handoff protocol.
|
|
61
|
-
|
|
62
|
-
## Quick Reference
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
# Navigate and wait
|
|
66
|
-
browse goto https://example.com
|
|
67
|
-
browse wait --network-idle
|
|
68
|
-
|
|
69
|
-
# Read content
|
|
70
|
-
browse text # Cleaned page text
|
|
71
|
-
browse html "[id=main]" # innerHTML of element
|
|
72
|
-
browse links # All links as "text → href"
|
|
73
|
-
browse js "document.title" # Run JavaScript
|
|
74
|
-
|
|
75
|
-
# Screenshot (then Read the image to view it)
|
|
76
|
-
browse screenshot .browse/sessions/default/homepage.png
|
|
77
|
-
|
|
78
|
-
# Interact via snapshot refs (preferred)
|
|
79
|
-
browse snapshot -i # Get interactive element refs
|
|
80
|
-
browse click @e3 # Click by ref
|
|
81
|
-
browse fill @e4 "test@test.com" # Fill by ref
|
|
82
|
-
browse check @e7 # Check checkbox
|
|
83
|
-
browse select @e5 "option-value" # Select dropdown
|
|
84
|
-
|
|
85
|
-
# Interact via CSS selectors (use [id=...] instead of #)
|
|
86
|
-
browse click "button.submit"
|
|
87
|
-
browse fill "[id=email]" "test@test.com"
|
|
88
|
-
browse fill "[id=password]" "abc123"
|
|
89
|
-
browse click "button[type=submit]"
|
|
90
|
-
|
|
91
|
-
# Wait variants
|
|
92
|
-
browse wait ".loaded" # Wait for element
|
|
93
|
-
browse wait --url "**/dashboard" # Wait for URL
|
|
94
|
-
browse wait --network-idle # Wait for network idle
|
|
95
|
-
browse wait 2000 # Wait milliseconds
|
|
96
|
-
|
|
97
|
-
# Element queries
|
|
98
|
-
browse count ".search-result" # Count elements
|
|
99
|
-
browse value "[id=email]" # Get input value
|
|
100
|
-
browse css @e3 "color" # Get computed CSS
|
|
101
|
-
browse attrs @e3 # Get attributes
|
|
102
|
-
browse console # View console messages
|
|
103
|
-
browse errors # View page errors
|
|
104
|
-
|
|
105
|
-
# Scroll
|
|
106
|
-
browse scroll down
|
|
107
|
-
browse scroll "[id=target]"
|
|
108
|
-
|
|
109
|
-
# iframes
|
|
110
|
-
browse frame "[id=my-iframe]" # Target iframe
|
|
111
|
-
browse text # Read inside iframe
|
|
112
|
-
browse frame main # Back to main page
|
|
113
|
-
|
|
114
|
-
# Network mocking
|
|
115
|
-
browse route "**/api/data" fulfill 200 '{"mock":true}'
|
|
116
|
-
browse route "**/*.png" block
|
|
117
|
-
browse route clear
|
|
118
|
-
|
|
119
|
-
# Cookie import from real browsers (macOS)
|
|
120
|
-
browse cookie-import chrome --domain .site.com
|
|
121
|
-
|
|
122
|
-
# Persistent profiles
|
|
123
|
-
browse --profile mysite goto https://app.com
|
|
124
|
-
|
|
125
|
-
# Cloud providers (encrypted API keys, never visible to agents)
|
|
126
|
-
browse provider save browserbase <api-key>
|
|
127
|
-
browse --provider browserbase goto https://example.com
|
|
128
|
-
browse provider list
|
|
129
|
-
browse provider delete browserbase
|
|
130
|
-
|
|
131
|
-
# Native app automation (Android, iOS, macOS)
|
|
132
|
-
browse sim start --platform android --app com.android.settings --visible
|
|
133
|
-
browse sim start --platform ios --app com.apple.Preferences --visible
|
|
134
|
-
browse --platform android --app com.android.settings snapshot -i
|
|
135
|
-
browse --platform ios --app com.apple.Preferences snapshot -i
|
|
136
|
-
browse --app "System Settings" snapshot -i # macOS
|
|
137
|
-
browse --platform android --app com.android.settings tap @e3
|
|
138
|
-
browse --platform android --app com.android.settings swipe up
|
|
139
|
-
browse --platform android --app com.android.settings press back
|
|
140
|
-
browse --platform ios --app com.apple.mobilesafari type "example.com"
|
|
141
|
-
browse --app TextEdit press "cmd+n" # macOS modifier combos
|
|
142
|
-
browse sim stop --platform android
|
|
143
|
-
browse sim stop --platform ios
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
## Command Reference
|
|
147
|
-
|
|
148
|
-
### Navigation
|
|
149
|
-
```
|
|
150
|
-
browse goto <url> Navigate current tab
|
|
151
|
-
browse back Go back
|
|
152
|
-
browse forward Go forward
|
|
153
|
-
browse reload Reload page
|
|
154
|
-
browse url Print current URL
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
### Content extraction
|
|
158
|
-
```
|
|
159
|
-
browse text Cleaned page text (no scripts/styles)
|
|
160
|
-
browse html [selector] innerHTML of element, or full page HTML
|
|
161
|
-
browse links All links as "text → href"
|
|
162
|
-
browse forms All forms + fields as JSON
|
|
163
|
-
browse accessibility Accessibility tree snapshot (ARIA)
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### Snapshot (ref-based element selection)
|
|
167
|
-
```
|
|
168
|
-
browse snapshot Full accessibility tree with @refs
|
|
169
|
-
browse snapshot -i Interactive elements only — terse flat list (minimal tokens)
|
|
170
|
-
browse snapshot -i -f Interactive elements — full indented tree with props
|
|
171
|
-
browse snapshot -i -V Interactive elements — viewport only (skip below-fold)
|
|
172
|
-
browse snapshot -c Compact (no empty structural elements)
|
|
173
|
-
browse snapshot -C Cursor-interactive (detect divs with cursor:pointer/onclick/tabindex)
|
|
174
|
-
browse snapshot -d <N> Limit depth to N levels
|
|
175
|
-
browse snapshot -s <sel> Scope to CSS selector
|
|
176
|
-
browse snapshot-diff Compare current vs previous snapshot
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
After snapshot, use @refs as selectors in any command:
|
|
180
|
-
```
|
|
181
|
-
browse click @e3 Click the element assigned ref @e3
|
|
182
|
-
browse fill @e4 "value" Fill the input assigned ref @e4
|
|
183
|
-
browse hover @e1 Hover the element assigned ref @e1
|
|
184
|
-
browse html @e2 Get innerHTML of ref @e2
|
|
185
|
-
browse css @e5 "color" Get computed CSS of ref @e5
|
|
186
|
-
browse attrs @e6 Get attributes of ref @e6
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
Refs are invalidated on navigation — run `snapshot` again after `goto`.
|
|
190
|
-
|
|
191
|
-
### Native App Automation
|
|
192
|
-
```
|
|
193
|
-
browse sim start --platform ios|android --app <id> [--visible] Start simulator/emulator + app
|
|
194
|
-
browse sim stop --platform ios|android Stop simulator/emulator
|
|
195
|
-
browse sim status --platform ios|android Check runner status
|
|
196
|
-
browse --platform ios --app <bundleId> <command> Target iOS app
|
|
197
|
-
browse --platform android --app <package> <command> Target Android app
|
|
198
|
-
browse --app <name> <command> Target macOS app
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
Supported commands on all app platforms: `snapshot`, `text`, `tap`, `fill`, `type`, `press`, `swipe`, `screenshot`.
|
|
202
|
-
macOS also supports modifier combos: `browse --app TextEdit press "cmd+n"`.
|
|
203
|
-
Android auto-installs adb, Java, SDK, and emulator on first use (macOS via Homebrew).
|
|
204
|
-
|
|
205
|
-
### Interaction
|
|
206
|
-
```
|
|
207
|
-
browse click <selector> Click element (CSS selector or @ref)
|
|
208
|
-
browse click <x>,<y> Click at page coordinates (e.g. 590,461)
|
|
209
|
-
browse rightclick <selector> Right-click element (context menu)
|
|
210
|
-
browse dblclick <selector> Double-click element
|
|
211
|
-
browse fill <selector> <value> Fill input field
|
|
212
|
-
browse select <selector> <val> Select dropdown value
|
|
213
|
-
browse hover <selector> Hover over element
|
|
214
|
-
browse focus <selector> Focus element
|
|
215
|
-
browse tap <selector> Tap element (requires touch context via emulate)
|
|
216
|
-
browse check <selector> Check checkbox
|
|
217
|
-
browse uncheck <selector> Uncheck checkbox
|
|
218
|
-
browse drag <src> <tgt> Drag source to target
|
|
219
|
-
browse type <text> Type into focused element
|
|
220
|
-
browse press <key> Press key (Enter, Tab, Escape, etc.)
|
|
221
|
-
browse keydown <key> Hold key down
|
|
222
|
-
browse keyup <key> Release key
|
|
223
|
-
browse keyboard inserttext <t> Insert text without key events
|
|
224
|
-
browse scroll [sel|up|down] Scroll element/viewport/bottom
|
|
225
|
-
browse scrollinto <sel> Scroll element into view (explicit)
|
|
226
|
-
browse scrollintoview <sel> Alias for scrollinto
|
|
227
|
-
browse swipe <dir> [px] Swipe up/down/left/right (touch events)
|
|
228
|
-
browse mouse move <x> <y> Move mouse to coordinates
|
|
229
|
-
browse mouse down [button] Press mouse button (left/right/middle)
|
|
230
|
-
browse mouse up [button] Release mouse button
|
|
231
|
-
browse mouse wheel <dy> [dx] Scroll wheel
|
|
232
|
-
browse wait <sel> Wait for element to appear
|
|
233
|
-
browse wait <sel> --state hidden Wait for element to disappear
|
|
234
|
-
browse wait <ms> Wait for milliseconds
|
|
235
|
-
browse wait --text "..." Wait for text to appear in page
|
|
236
|
-
browse wait --fn "expr" Wait for JavaScript condition
|
|
237
|
-
browse wait --load <state> Wait for load state
|
|
238
|
-
browse wait --url <pattern> Wait for URL match
|
|
239
|
-
browse wait --network-idle Wait for network idle
|
|
240
|
-
browse wait --download Wait for download, return temp path
|
|
241
|
-
browse wait --download ./report.pdf Wait and save to path
|
|
242
|
-
browse wait --download 60000 Custom timeout (ms)
|
|
243
|
-
browse wait --download ./file.pdf 60000 Both path and timeout
|
|
244
|
-
browse set geo <lat> <lng> Set geolocation
|
|
245
|
-
browse set media <scheme> Set color scheme (dark/light/no-preference)
|
|
246
|
-
browse header <name>:<value> Set request header
|
|
247
|
-
browse useragent <string> Set user agent string
|
|
248
|
-
browse viewport <WxH> Set viewport size (e.g. 375x812)
|
|
249
|
-
browse upload <sel> <files> Upload file(s) to a file input
|
|
250
|
-
browse highlight <selector> Highlight element (visual debugging)
|
|
251
|
-
browse download <sel> [path] Download file triggered by click
|
|
252
|
-
browse dialog-accept [value] Set dialogs to auto-accept
|
|
253
|
-
browse dialog-dismiss Set dialogs to auto-dismiss (default)
|
|
254
|
-
browse emulate <device> Emulate device (iphone, pixel, etc.)
|
|
255
|
-
browse emulate reset Reset to desktop (1920x1080)
|
|
256
|
-
browse offline [on|off] Toggle offline mode
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
### Cookies
|
|
260
|
-
```
|
|
261
|
-
browse cookie <n>=<v> Set cookie (shorthand)
|
|
262
|
-
browse cookie set <n> <v> [--domain d --secure] Set cookie with options
|
|
263
|
-
browse cookie clear Clear all cookies
|
|
264
|
-
browse cookie export <file> Export cookies to JSON file
|
|
265
|
-
browse cookie import <file> Import cookies from JSON file
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
### Network
|
|
269
|
-
```
|
|
270
|
-
browse route <pattern> block Block matching requests
|
|
271
|
-
browse route <pattern> fulfill <s> [b] Mock with status + body
|
|
272
|
-
browse route clear Remove all routes
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
### Inspection
|
|
276
|
-
```
|
|
277
|
-
browse js <expression> Run JS, print result
|
|
278
|
-
browse eval <js-file> Run JS file against page
|
|
279
|
-
browse css <selector> <prop> Get computed CSS property
|
|
280
|
-
browse attrs <selector> Get element attributes as JSON
|
|
281
|
-
browse element-state <selector> Element state (visible/enabled/checked/focused)
|
|
282
|
-
browse value <selector> Get input field value
|
|
283
|
-
browse count <selector> Count matching elements
|
|
284
|
-
browse box <selector> Get bounding box as JSON {x, y, width, height}
|
|
285
|
-
browse dialog Last dialog info or "(no dialog detected)"
|
|
286
|
-
browse console [--clear] View/clear console messages
|
|
287
|
-
browse errors [--clear] View/clear page errors (filtered from console)
|
|
288
|
-
browse network [--clear] View/clear network requests
|
|
289
|
-
browse cookies Dump all cookies as JSON
|
|
290
|
-
browse storage [set <k> <v>] View/set localStorage
|
|
291
|
-
browse perf Page load performance timings
|
|
292
|
-
browse devices [filter] List available device names
|
|
293
|
-
browse clipboard Read system clipboard text
|
|
294
|
-
browse clipboard write <text> Write text to system clipboard
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
### Visual
|
|
298
|
-
```
|
|
299
|
-
browse screenshot [path] Viewport screenshot (default: .browse/sessions/{id}/screenshot.png)
|
|
300
|
-
browse screenshot --full [path] Full-page screenshot (entire scrollable page)
|
|
301
|
-
browse screenshot <sel|@ref> [path] Screenshot specific element
|
|
302
|
-
browse screenshot --clip x,y,w,h [path] Screenshot clipped region
|
|
303
|
-
browse screenshot --annotate [path] Screenshot with numbered badges + legend
|
|
304
|
-
browse pdf [path] Save as PDF
|
|
305
|
-
browse responsive [prefix] Screenshots at mobile/tablet/desktop
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
### Frames (iframe targeting)
|
|
309
|
-
```
|
|
310
|
-
browse frame <selector> Target an iframe (subsequent commands run inside it)
|
|
311
|
-
browse frame main Return to main page
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
### Find (semantic element locators)
|
|
315
|
-
```
|
|
316
|
-
browse find role <query> Find elements by ARIA role
|
|
317
|
-
browse find text <query> Find elements by text content
|
|
318
|
-
browse find label <query> Find elements by label
|
|
319
|
-
browse find placeholder <query> Find elements by placeholder
|
|
320
|
-
browse find testid <query> Find elements by test ID
|
|
321
|
-
browse find alt <query> Find elements by alt text
|
|
322
|
-
browse find title <query> Find elements by title attribute
|
|
323
|
-
browse find first <sel> First matching element
|
|
324
|
-
browse find last <sel> Last matching element
|
|
325
|
-
browse find nth <n> <sel> Nth matching element (0-indexed)
|
|
326
|
-
```
|
|
327
|
-
|
|
328
|
-
### Compare
|
|
329
|
-
```
|
|
330
|
-
browse diff <url1> <url2> Text diff between two pages
|
|
331
|
-
browse screenshot-diff <base> [curr] Pixel-diff two PNG screenshots
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
### Multi-step (chain)
|
|
335
|
-
```
|
|
336
|
-
echo '[["goto","https://example.com"],["snapshot","-i"],["click","@e1"]]' | browse chain
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
### Tabs
|
|
340
|
-
```
|
|
341
|
-
browse tabs List tabs (id, url, title)
|
|
342
|
-
browse tab <id> Switch to tab
|
|
343
|
-
browse newtab [url] Open new tab
|
|
344
|
-
browse closetab [id] Close tab
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
### Sessions (parallel agents)
|
|
348
|
-
```
|
|
349
|
-
browse --session <id> <cmd> Run command in named session
|
|
350
|
-
browse sessions List active sessions
|
|
351
|
-
browse session-close <id> Close a session
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
### Profiles
|
|
355
|
-
```
|
|
356
|
-
browse --profile <name> <cmd> Use persistent browser profile
|
|
357
|
-
browse profile list List profiles with disk size
|
|
358
|
-
browse profile delete <name> Delete a profile
|
|
359
|
-
browse profile clean [--older-than <d>] Remove old profiles (default: 7 days)
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
### State persistence
|
|
363
|
-
```
|
|
364
|
-
browse state save [name] Save cookies + localStorage (all origins)
|
|
365
|
-
browse state load [name] Restore saved state
|
|
366
|
-
browse state list List saved states
|
|
367
|
-
browse state show [name] Show contents of saved state
|
|
368
|
-
browse state clean Delete states older than 7 days
|
|
369
|
-
browse state clean --older-than N Custom age threshold (days)
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
### Cookie import (macOS — borrow auth from real browsers)
|
|
373
|
-
```
|
|
374
|
-
browse cookie-import --list List installed browsers
|
|
375
|
-
browse cookie-import <browser> --domain <d> Import cookies for a domain
|
|
376
|
-
browse cookie-import <browser> --profile <p> --domain <d> Specific Chrome profile
|
|
377
|
-
```
|
|
378
|
-
|
|
379
|
-
### Auth vault
|
|
380
|
-
```
|
|
381
|
-
browse auth save <name> <url> <user> <pass|--password-stdin> Save credentials (encrypted)
|
|
382
|
-
browse auth login <name> Auto-login using saved credentials
|
|
383
|
-
browse auth list List saved credentials
|
|
384
|
-
browse auth delete <name> Delete credentials
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
### HAR recording
|
|
388
|
-
```
|
|
389
|
-
browse har start Start recording network traffic
|
|
390
|
-
browse har stop [path] Stop and save HAR file
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
### Video recording
|
|
394
|
-
```
|
|
395
|
-
browse video start [dir] Start recording video (WebM, compositor-level)
|
|
396
|
-
browse video stop Stop recording and save video files
|
|
397
|
-
browse video status Check if recording is active
|
|
398
|
-
```
|
|
399
|
-
|
|
400
|
-
### Command recording & export
|
|
401
|
-
```
|
|
402
|
-
browse record start Start recording commands
|
|
403
|
-
browse record stop Stop recording, keep steps for export
|
|
404
|
-
browse record status Recording state and step count
|
|
405
|
-
browse record export browse [path] Export as chain-compatible JSON (replay with browse chain)
|
|
406
|
-
browse record export replay [path] Export as Chrome DevTools Recorder (Playwright/Puppeteer)
|
|
407
|
-
browse record export replay --selectors css,aria [path] Filter selector types in export
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
### React DevTools
|
|
411
|
-
```
|
|
412
|
-
browse react-devtools enable Enable React DevTools (downloads hook, injects, reloads)
|
|
413
|
-
browse react-devtools disable Disable React DevTools
|
|
414
|
-
browse react-devtools tree Component tree with indentation
|
|
415
|
-
browse react-devtools props <sel> Props/state/hooks of component at element
|
|
416
|
-
browse react-devtools suspense Suspense boundaries + status
|
|
417
|
-
browse react-devtools errors Error boundaries + caught errors
|
|
418
|
-
browse react-devtools profiler Render timing per component
|
|
419
|
-
browse react-devtools hydration Hydration timing (Next.js)
|
|
420
|
-
browse react-devtools renders What re-rendered since last commit
|
|
421
|
-
browse react-devtools owners <sel> Parent component chain
|
|
422
|
-
browse react-devtools context <sel> Context values consumed by component
|
|
423
|
-
```
|
|
424
|
-
|
|
425
|
-
### Performance audit
|
|
426
|
-
```
|
|
427
|
-
browse perf-audit [url] Full performance audit (Web Vitals, resources, images, fonts, DOM, render-blocking, third-party, stack detection, correlations, recommendations)
|
|
428
|
-
browse perf-audit [url] --no-coverage Skip JS/CSS coverage collection (faster)
|
|
429
|
-
browse perf-audit [url] --no-detect Skip framework/SaaS/infrastructure detection
|
|
430
|
-
browse perf-audit [url] --json Output as structured JSON (for programmatic use)
|
|
431
|
-
browse perf-audit save [name] Save audit report to .browse/audits/ (auto-names from URL + date if omitted)
|
|
432
|
-
browse perf-audit compare <base> [curr] Compare saved baseline vs current page or another saved audit (regression detection)
|
|
433
|
-
browse perf-audit list List saved audit reports (name, size, date)
|
|
434
|
-
browse perf-audit delete <name> Delete a saved audit report
|
|
435
|
-
browse detect Detect tech stack: frameworks, SaaS platforms, CDN, protocol, compression, caching, DOM complexity, third-party inventory
|
|
436
|
-
browse coverage start Start JS/CSS code coverage collection
|
|
437
|
-
browse coverage stop Stop collection and report per-file used/unused bytes
|
|
438
|
-
browse initscript set <code> Inject JS that runs before every page load (pre-navigation observers, mocks, polyfills)
|
|
439
|
-
browse initscript show Show current init script
|
|
440
|
-
browse initscript clear Remove init script
|
|
441
|
-
```
|
|
442
|
-
|
|
443
|
-
### Cloud Providers
|
|
444
|
-
```
|
|
445
|
-
browse provider save <name> <key> Save provider API key (encrypted)
|
|
446
|
-
browse provider list List saved providers
|
|
447
|
-
browse provider delete <name> Delete provider key
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
### Handoff (human takeover)
|
|
451
|
-
```
|
|
452
|
-
browse handoff [reason] Swap to Chrome for user to solve CAPTCHA/MFA (bypasses bot detection)
|
|
453
|
-
browse handoff --chromium Force Playwright Chromium instead of Chrome
|
|
454
|
-
browse resume Swap back to headless, returns fresh snapshot
|
|
455
|
-
```
|
|
456
|
-
|
|
457
|
-
### Server management
|
|
458
|
-
```
|
|
459
|
-
browse status Server health, uptime, session count
|
|
460
|
-
browse instances List all running browse servers (instance, PID, port, status)
|
|
461
|
-
browse version Print CLI version
|
|
462
|
-
browse doctor System check (Node, Playwright, Chromium)
|
|
463
|
-
browse upgrade Self-update via npm
|
|
464
|
-
browse stop Shutdown server
|
|
465
|
-
browse restart Kill + restart server
|
|
466
|
-
browse inspect Open DevTools (requires BROWSE_DEBUG_PORT)
|
|
467
|
-
```
|
|
468
|
-
|
|
469
|
-
## CLI Flags
|
|
470
|
-
|
|
471
|
-
| Flag | Description |
|
|
472
|
-
|------|-------------|
|
|
473
|
-
| `--session <id>` | Named session (isolates tabs, refs, cookies — auto-persists on close) |
|
|
474
|
-
| `--profile <name>` | Persistent browser profile (own Chromium, full state) |
|
|
475
|
-
| `--state <path>` | Load state file (cookies/storage) before first command |
|
|
476
|
-
| `--json` | Wrap output as `{success, data, command}` |
|
|
477
|
-
| `--content-boundaries` | Wrap page content in nonce-delimited markers (prompt injection defense) |
|
|
478
|
-
| `--allowed-domains <d,d>` | Block navigation/resources outside allowlist |
|
|
479
|
-
| `--max-output <n>` | Truncate output to N characters |
|
|
480
|
-
| `--headed` | Run browser in headed (visible) mode |
|
|
481
|
-
| `--chrome` | Shortcut for `--runtime chrome --headed` (uses real Chrome, bypasses bot detection) |
|
|
482
|
-
| `--cdp <port>` | Connect to Chrome on a specific debugging port |
|
|
483
|
-
| `--connect` | Auto-discover and connect to a running Chrome instance |
|
|
484
|
-
| `--provider <name>` | Cloud browser provider (browserless, browserbase) |
|
|
485
|
-
| `--runtime <name>` | Browser engine: playwright (default), rebrowser (stealth), lightpanda, chrome |
|
|
486
|
-
| `--mcp` | Run as MCP server (for Cursor, Windsurf, Cline) |
|
|
487
|
-
|
|
488
|
-
## Reference Files
|
|
489
|
-
|
|
490
|
-
For extended examples, operational guides, or first-time setup:
|
|
491
|
-
|
|
492
|
-
| File | Read when... |
|
|
493
|
-
|------|-------------|
|
|
494
|
-
| [references/permissions.md](references/permissions.md) | First-time setup — user wants to pre-allow browse commands in `.claude/settings.json` |
|
|
495
|
-
| [references/guides.md](references/guides.md) | You hit a CAPTCHA/MFA blocker (handoff protocol), want optimization tips (speed rules), or need help choosing which command to use (decision table) |
|
|
496
|
-
| [references/commands.md](references/commands.md) | You want extended usage examples beyond the Quick Reference above |
|
|
File without changes
|
|
File without changes
|