Loading...
Loading...
Browser automation for web tasks - scraping, form filling, testing, screenshots, data extraction. Use when tasks involve web pages, URLs, login flows, or web interaction.
npx skill4agent add manaflow-ai/cloudrouter agent-browsercloudrouter browsercloudrouter browsercloudrouter lscloudrouter start .cloudrouter browser open <id> "https://example.com"
cloudrouter browser snapshot -i <id> # -i = interactive elements only
cloudrouter browser click <id> @e5 # Click element ref
cloudrouter browser fill <id> @e3 "text" # Fill input
cloudrouter browser snapshot -i <id> # Re-snapshot after changecloudrouter browser open <id> <url> # Navigate to URL
cloudrouter browser back <id> # Go back
cloudrouter browser forward <id> # Go forward
cloudrouter browser reload <id> # Refresh page
cloudrouter browser url <id> # Get current URL
cloudrouter browser title <id> # Get page titlecloudrouter browser snapshot -i <id> # Interactive elements only (RECOMMENDED)
cloudrouter browser snapshot <id> # Full accessibility tree
cloudrouter browser snapshot -c <id> # Compact output
cloudrouter browser screenshot <id> # Screenshot (base64 to stdout)
cloudrouter browser screenshot <id> out.png # Save screenshot to file
cloudrouter browser screenshot --full <id> # Full page screenshot
cloudrouter browser eval <id> "document.title" # Run JavaScriptcloudrouter browser click <id> @e1 # Click element
cloudrouter browser dblclick <id> @e1 # Double-click
cloudrouter browser fill <id> @e2 "text" # Clear input and type text
cloudrouter browser type <id> @e2 "text" # Type without clearing (appends)
cloudrouter browser press <id> Enter # Press key (Enter, Tab, Escape, etc.)
cloudrouter browser hover <id> @e5 # Hover over element
cloudrouter browser focus <id> @e3 # Focus element
cloudrouter browser scroll <id> down # Scroll down (default pixels)
cloudrouter browser scroll <id> down 500 # Scroll down 500px
cloudrouter browser scroll <id> up # Scroll up
cloudrouter browser scrollintoview <id> "#element" # Scroll into view (CSS selector only, NOT @e refs)
cloudrouter browser select <id> @e7 "value" # Select dropdown option
cloudrouter browser check <id> @e8 # Check checkbox
cloudrouter browser uncheck <id> @e9 # Uncheck checkbox
cloudrouter browser upload <id> @e10 /path # Upload file
cloudrouter browser drag <id> @e1 @e2 # Drag and drop
cloudrouter browser wait <id> @e3 # Wait for element to appear
cloudrouter browser wait <id> 2000 # Wait millisecondscloudrouter browser get-text <id> @e1 # Get element text
cloudrouter browser get-value <id> @e2 # Get input value
cloudrouter browser get-attr <id> @e3 href # Get attribute
cloudrouter browser get-html <id> @e4 # Get innerHTML
cloudrouter browser get-count <id> ".item" # Count matching elements
cloudrouter browser is-visible <id> @e1 # Check visibility
cloudrouter browser is-enabled <id> @e1 # Check if enabled
cloudrouter browser is-checked <id> @e1 # Check if checkedcloudrouter browser find <id> text "Sign In" click # By visible text
cloudrouter browser find <id> label "Email" fill "user@test.com" # By label
cloudrouter browser find <id> placeholder "Search" type "query" # By placeholder
cloudrouter browser find <id> testid "submit-btn" click # By data-testidNote:finds the FIRST button on the page — it cannot filter by name. Usefind <id> role button clickto target a specific button. There is nofind <id> text "Button Name" clickflag.--name
cloudrouter browser eval <id> "document.title" # Evaluate JS
cloudrouter browser console <id> # View console output
cloudrouter browser errors <id> # View JS errorscloudrouter browser tab-list <id> # List tabs
cloudrouter browser tab-new <id> "https://..." # New tab
cloudrouter browser tab-switch <id> 2 # Switch tab
cloudrouter browser tab-close <id> # Close tab
cloudrouter browser frame <id> "#iframe" # Switch to iframe
cloudrouter browser frame <id> main # Back to maincloudrouter browser cookies <id> # List cookies
cloudrouter browser cookies-set <id> name value # Set cookie
cloudrouter browser cookies-clear <id> # Clear cookies
cloudrouter browser storage-local <id> # Get localStorage
cloudrouter browser storage-local-set <id> key value # Set localStorage
cloudrouter browser storage-local-clear <id> # Clear localStoragecloudrouter browser state-save <id> /tmp/auth.json # Save cookies + storage
cloudrouter browser state-load <id> /tmp/auth.json # Restore statecloudrouter browser set-viewport <id> 1920 1080 # Set viewport
cloudrouter browser set-device <id> "iPhone 14" # Emulate device
cloudrouter browser set-geo <id> 37.77 -122.42 # Set geolocation
cloudrouter browser set-offline <id> on # Toggle offline
cloudrouter browser set-media <id> dark # Color schemecloudrouter browser network-route <id> "**/api/*" # Intercept requests
cloudrouter browser network-route <id> "**/ads/*" --abort # Block requests
cloudrouter browser network-unroute <id> # Remove routes
cloudrouter browser network-requests <id> # List requestscloudrouter browser dialog-accept <id> # Accept alert/confirm
cloudrouter browser dialog-accept <id> "answer" # Accept prompt with text
cloudrouter browser dialog-dismiss <id> # Dismiss dialog@e1@e2@e3#id.classbutton[type="submit"][ref=e1]@e1cloudrouter browser open <id> "https://app.example.com/login"
cloudrouter browser snapshot -i <id>
# → @e1 [input] Email, @e2 [input] Password, @e3 [button] Sign In
cloudrouter browser fill <id> @e1 "user@example.com"
cloudrouter browser fill <id> @e2 "password123"
cloudrouter browser click <id> @e3
cloudrouter browser wait <id> 2000
cloudrouter browser snapshot -i <id> # Verify login success
cloudrouter browser screenshot <id> /tmp/result.pngcloudrouter browser open <id> "https://example.com/contact"
cloudrouter browser snapshot -i <id>
cloudrouter browser fill <id> @e1 "John Doe"
cloudrouter browser fill <id> @e2 "john@email.com"
cloudrouter browser fill <id> @e3 "Hello world"
cloudrouter browser click <id> @e4 # Submit
cloudrouter browser wait <id> 2000
cloudrouter browser snapshot -i <id> # Verify submissioncloudrouter browser open <id> "https://example.com/products"
cloudrouter browser snapshot <id> # Full tree for structure
cloudrouter browser get-text <id> @e5 # Extract specific text
cloudrouter browser eval <id> "JSON.stringify([...document.querySelectorAll('.product')].map(p => p.textContent))"cloudrouter browser open <id> "https://example.com"
cloudrouter browser snapshot -i <id>
cloudrouter browser click <id> @e3 # Click a link
cloudrouter browser wait <id> 2000 # Wait for page load
cloudrouter browser snapshot -i <id> # ALWAYS re-snapshot after navigation# Login once and save state
cloudrouter browser open <id> "https://app.example.com/login"
cloudrouter browser snapshot -i <id>
cloudrouter browser fill <id> @e1 "user@example.com"
cloudrouter browser fill <id> @e2 "password"
cloudrouter browser click <id> @e3
cloudrouter browser wait <id> 2000
cloudrouter browser state-save <id> /tmp/auth.json
# Restore in future sessions
cloudrouter browser state-load <id> /tmp/auth.json
cloudrouter browser open <id> "https://app.example.com/dashboard"cloudrouter browser snapshot -i <id>cloudrouter browser snapshot <id> -i-isnapshotsnapshot -i-ifilltypefilltypewait| Issue | Solution |
|---|---|
| Element not found / wrong element | Re-snapshot with |
| Put flags BEFORE id: |
| Click doesn't work | Try |
| Page not loading | Check URL with |
| Browser not ready | Wait a few seconds after sandbox creation, retry |
| Refs differ between snapshots | Don't mix full and |
| Form field has old text | Use |
| Use |
| There is no |
| Run |
| |
| |
| File saves inside sandbox (e.g. |
| Use |
| Stale ref error: "Action timed out" | Always re-snapshot after clicks/form submits that change the DOM |