--- name: "Vibe Check - Browser Automation" description: "Browser automation for AI agents. Navigate pages, fill forms, click elements, take screenshots, and manage tabs — all through simple CLI commands. 2.6k+ GitHub stars." version: 1.0.0 author: vibiumdev license: MIT tags: [browser-automation, vibe-coding, ai-agent, chrome, cli, testing, web-scraping] testingTypes: [e2e, visual, accessibility] frameworks: [playwright] languages: [typescript, javascript, python, go] domains: [web, mobile] agents: [claude-code, cursor, github-copilot, windsurf, codex, aider, continue, cline, zed, bolt, opencode, gemini-cli, amp] --- # Vibium Browser Automation — CLI Reference The `vibium` CLI automates Chrome via the command line. The browser auto-launches on first use (daemon mode keeps it running between commands). ``` vibium go && vibium map && vibium click @e1 && vibium map ``` ## Core Workflow Every browser automation follows this pattern: 1. **Navigate**: `vibium go ` 2. **Map**: `vibium map` (get element refs like `@e1`, `@e2`) 3. **Interact**: Use refs to click, fill, select — e.g. `vibium click @e1` 4. **Re-map**: After navigation or DOM changes, get fresh refs with `vibium map` ## Binary Resolution Before running any commands, resolve the `vibium` binary path once: 1. Try `vibium` directly (works if globally installed via `npm install -g vibium`) 2. Fall back to `./clicker/bin/vibium` (dev environment, in project root) 3. Fall back to `./node_modules/.bin/vibium` (local npm install) Run `vibium --help` (or the resolved path) to confirm. Use the resolved path for all subsequent commands. **Windows note:** Use forward slashes in paths (e.g. `./clicker/bin/vibium.exe`) and quote paths containing spaces. ## Command Chaining Chain commands with `&&` to run them sequentially. The chain stops on first error: ```sh vibium go https://example.com && vibium map && vibium click @e3 && vibium diff map ``` **When to chain:** Use `&&` for sequences that should happen back-to-back (navigate → interact → verify). Run commands separately when you need to inspect output between steps. **When NOT to chain:** Don't chain commands that depend on parsing the previous output (e.g. reading map output to decide what to click). Run those separately so you can analyze the result first. ## Commands ### Discovery - `vibium map` — map interactive elements with @refs (recommended before interacting) - `vibium map --selector "nav"` — scope map to elements within a CSS subtree - `vibium diff map` — compare current vs last map (see what changed) ### Navigation - `vibium go ` — go to a page - `vibium back` — go back in history - `vibium forward` — go forward in history - `vibium reload` — reload the current page - `vibium url` — print current URL - `vibium title` — print page title ### Reading Content - `vibium text` — get all page text - `vibium text ""` — get text of a specific element - `vibium html` — get page HTML (use `--outer` for outerHTML) - `vibium find ""` — find element, return `@e1` ref (clickable with `vibium click @e1`) - `vibium find --text "Sign In"` — find element by text content → `@e1` - `vibium find --label "Email"` — find input by label → `@e1` - `vibium find --placeholder "Search"` — find by placeholder → `@e1` - `vibium find --testid "submit-btn"` — find by data-testid → `@e1` - `vibium find --xpath "//div[@class]"` — find by XPath → `@e1` - `vibium find --alt "Logo"` — find by alt attribute → `@e1` - `vibium find --title "Settings"` — find by title attribute → `@e1` - `vibium find-all ""` — find all matching elements → `@e1`, `@e2`, ... (`--limit N`) - `vibium find --role ` — find element by ARIA role → `@e1` (combine with `--text`, `--label`, etc.) - `vibium eval ""` — run JavaScript and print result (`--stdin` to read from stdin) - `vibium count ""` — count matching elements - `vibium screenshot -o file.png` — capture screenshot (`--full-page`, `--annotate`) - `vibium a11y-tree` — accessibility tree (`--everything` for all nodes) ### Interaction - `vibium click ""` — click an element (also accepts `@ref` from map) - `vibium dblclick ""` — double-click an element - `vibium type "" ""` — type into an input (appends to existing value) - `vibium fill "" ""` — clear field and type new text (replaces value) - `vibium press [selector]` — press a key on element or focused element - `vibium focus ""` — focus an element - `vibium hover ""` — hover over an element - `vibium scroll [direction]` — scroll page (`--amount N`, `--selector`) - `vibium scroll-into-view ""` — scroll element into view (centered) - `vibium keys ""` — press keys (Enter, Control+a, Shift+Tab) - `vibium select "" ""` — pick a dropdown option - `vibium check ""` — check a checkbox/radio (idempotent) - `vibium uncheck ""` — uncheck a checkbox (idempotent) ### Mouse Primitives - `vibium mouse-click [x] [y]` — click at coordinates or current position (`--button 0|1|2`) - `vibium mouse-move ` — move mouse to coordinates - `vibium mouse-down` — press mouse button (`--button 0|1|2`) - `vibium mouse-up` — release mouse button (`--button 0|1|2`) - `vibium drag "" ""` — drag from one element to another ### Element State - `vibium value ""` — get input/textarea/select value - `vibium attr "" ""` — get HTML attribute value - `vibium is-visible ""` — check if element is visible (true/false) - `vibium is-enabled ""` — check if element is enabled (true/false) - `vibium is-checked ""` — check if checkbox/radio is checked (true/false) ### Waiting - `vibium wait ""` — wait for element (`--state visible|hidden|attached`, `--timeout ms`) - `vibium wait-for-url ""` — wait until URL contains substring (`--timeout ms`) - `vibium wait-for-load` — wait until page is fully loaded (`--timeout ms`) - `vibium wait-for-text ""` — wait until text appears on page (`--timeout ms`) - `vibium wait-for-fn ""` — wait until JS expression returns truthy (`--timeout ms`) - `vibium sleep ` — pause execution (max 30000ms) ### Capture - `vibium screenshot -o file.png` — capture screenshot (`--full-page`, `--annotate`) - `vibium pdf -o file.pdf` — save page as PDF ### Dialogs - `vibium dialog accept [text]` — accept dialog (optionally with prompt text) - `vibium dialog dismiss` — dismiss dialog ### Emulation - `vibium set-viewport ` — set viewport size (`--dpr` for device pixel ratio) - `vibium viewport` — get current viewport dimensions - `vibium window` — get OS browser window dimensions and state - `vibium set-window [x] [y]` — set window size and position (`--state`) - `vibium emulate-media` — override CSS media features (`--color-scheme`, `--reduced-motion`, `--forced-colors`, `--contrast`, `--media`) - `vibium set-geolocation ` — override geolocation (`--accuracy`) - `vibium set-content ""` — replace page HTML (`--stdin` to read from stdin) ### Frames - `vibium frames` — list all iframes on the page - `vibium frame ""` — find a frame by name or URL substring ### File Upload - `vibium upload "" ` — set files on input[type=file] ### Tracing - `vibium trace start` — start recording (`--screenshots`, `--snapshots`, `--name`) - `vibium trace stop` — stop recording and save ZIP (`-o path`) ### Cookies - `vibium cookies` — list all cookies - `vibium cookies set ` — set a cookie - `vibium cookies clear` — clear all cookies ### Storage State - `vibium storage-state` — export cookies + localStorage + sessionStorage (`-o state.json`) - `vibium restore-storage ` — restore state from JSON file ### Downloads - `vibium download set-dir ` — set download directory ### Tabs - `vibium tabs` — list open tabs - `vibium tab-new [url]` — open new tab - `vibium tab-switch ` — switch tab - `vibium tab-close [index]` — close tab ### Debug - `vibium highlight ""` — highlight element visually (3 seconds) ### Session - `vibium quit` — close the browser (daemon keeps running) - `vibium close` — alias for quit - `vibium daemon start` — start background browser - `vibium daemon status` — check if running - `vibium daemon stop` — stop daemon ## Common Patterns ### Ref-based workflow (recommended for AI) ```sh vibium go https://example.com vibium map vibium click @e1 vibium map # re-map after interaction ``` ### Verify action worked ```sh vibium map vibium click @e3 vibium diff map # see what changed ``` ### Read a page ```sh vibium go https://example.com && vibium text ``` ### Fill a form (end-to-end) ```sh vibium go https://example.com/login vibium map # Look at map output to identify form fields vibium fill @e1 "user@example.com" vibium fill @e2 "secret" vibium click @e3 vibium wait-for-url "/dashboard" vibium screenshot -o after-login.png ``` ### Scoped map (large pages) ```sh vibium map --selector "nav" # Only map elements in