Vibium CLI Command Reference: All 22 Commands In Depth
Installation
npm install -g vibium
npx skills add https://github.com/VibiumDev/vibium --skill vibe-check
Chrome downloads automatically on first use. No manual browser setup required.
Navigation Commands
vibe-check navigate <url>
Go to a page. Waits for the page to reach a "loaded" state.
vibe-check navigate https://example.com
vibe-check navigate https://app.example.com/dashboard
# With wait after navigation (useful for SPAs that load asynchronously)
vibe-check navigate https://app.example.com --wait-open 3
Edge cases:
- Relative URLs are not supported — always use full URLs
- If navigation fails (DNS, timeout), the command exits with a non-zero code
- For SPAs, the page may "load" before JavaScript renders content — use
--wait-openorvibe-check waitafterward
vibe-check url
Print the current page URL. Useful for verification after redirects.
vibe-check url
# → https://example.com/
vibe-check title
Print the page title (<title> element content).
vibe-check title
# → Example Domain
Content Reading Commands
vibe-check text
Get all visible text from the page. Strips HTML, returns plain text.
vibe-check text
# → "Example Domain\nThis domain is for use in illustrative examples..."
# Get text of a specific element
vibe-check text "h1"
# → "Example Domain"
vibe-check text ".error-message"
# → "Invalid credentials"
When to use: Verifying page content, reading error messages, extracting data for assertions. This is the primary tool for the agent to "see" what's on the page.
vibe-check html
Get page HTML. Defaults to innerHTML, use --outer for outerHTML.
vibe-check html
# → full page HTML
vibe-check html --outer
# → includes the root element tags
When to use: When you need the actual DOM structure, not just text. Useful for debugging layout issues or finding selectors.
vibe-check find "<selector>"
Get detailed info about a single element: tag name, text content, bounding box coordinates.
vibe-check find "button.submit"
# → { tag: "button", text: "Submit", x: 200, y: 450, width: 120, height: 40 }
When to use: Before interacting with an element — verify it exists and check its properties. The bounding box is useful for understanding layout.
vibe-check find-all "<selector>"
Find all matching elements. Use --limit N to cap results.
vibe-check find-all "a"
# → List of all links on the page
vibe-check find-all ".product-card" --limit 5
# → First 5 product cards
When to use: Exploring page structure, counting elements, building lists of items to iterate over.
vibe-check eval "<javascript>"
Run arbitrary JavaScript in the page context. Print the return value.
# Get all link URLs as JSON
vibe-check eval "JSON.stringify([...document.querySelectorAll('a')].map(a => a.href))"
# Check localStorage
vibe-check eval "localStorage.getItem('auth_token')"
# Get computed style
vibe-check eval "getComputedStyle(document.querySelector('.alert')).backgroundColor"
# Count table rows
vibe-check eval "document.querySelectorAll('table tbody tr').length"
When to use: The "escape hatch" for anything the other commands can't do. Complex DOM queries, JavaScript state inspection, computed values. Very powerful but requires CSS/JS knowledge.
vibe-check screenshot -o file.png
Capture a viewport screenshot as PNG.
vibe-check screenshot -o before-login.png
vibe-check screenshot -o after-login.png
When to use: Visual verification, debugging (see the page state when something fails), building test evidence. Screenshots save to current directory by default.
Interaction Commands
vibe-check click "<selector>"
Click an element. Auto-waits for the element to be actionable (visible, stable, receives events, enabled).
vibe-check click "button[type=submit]"
vibe-check click "#login-btn"
vibe-check click "a[href='/dashboard']"
How it works internally:
- Polls for element existence (up to 30s)
- Runs all five actionability checks
- Gets element bounding box
- Calculates center coordinates
- Sends BiDi
input.performActionswith pointer move + click
vibe-check type "<selector>" "<text>"
Type text into an input element. Auto-waits for actionability + editability.
vibe-check type "input[name=email]" "user@example.com"
vibe-check type "#password" "secret123"
vibe-check type "textarea.comment" "This is my comment"
Important: This types character by character, triggering keydown, keypress, input, and keyup events — just like a real user. It does NOT just set the value property.
vibe-check hover "<selector>"
Hover over an element. Triggers mouseenter/mouseover events.
vibe-check hover ".dropdown-trigger"
# → dropdown menu appears
vibe-check click ".dropdown-item:first-child"
When to use: Dropdown menus, tooltips, hover states that reveal content.
vibe-check scroll [direction]
Scroll the page or a specific element.
vibe-check scroll down
vibe-check scroll up
vibe-check scroll down --amount 500 # pixels
vibe-check scroll down --selector ".panel" # scroll within element
vibe-check keys "<combo>"
Press keyboard keys. Supports modifiers and key names.
vibe-check keys "Enter"
vibe-check keys "Control+a" # Select all
vibe-check keys "Shift+Tab" # Reverse tab
vibe-check keys "Control+Shift+k" # Custom shortcut
vibe-check keys "Escape" # Close dialog
Key names: Enter, Tab, Escape, Backspace, Delete, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, PageUp, PageDown, Control, Shift, Alt, Meta
vibe-check select "<selector>" "<value>"
Pick a dropdown (<select>) option by value.
vibe-check select "#country" "US"
vibe-check select "select[name=role]" "admin"
Waiting Commands
vibe-check wait "<selector>"
Wait for an element to reach a specific state.
# Wait for element to be visible (default)
vibe-check wait ".modal"
# Wait for element to disappear
vibe-check wait ".loading-spinner" --state hidden
# Wait for element to exist in DOM (even if not visible)
vibe-check wait "#data-loaded" --state attached
# Custom timeout
vibe-check wait ".slow-content" --timeout 60000 # 60 seconds
States:
| State | Meaning |
|---|---|
visible (default) |
Element exists and is visible |
hidden |
Element doesn't exist or is not visible |
attached |
Element exists in DOM (may or may not be visible) |
Tab Commands
vibe-check tabs
List all open tabs with their index and URL.
vibe-check tabs
# → 0: https://example.com (active)
# → 1: https://docs.example.com
vibe-check tab-new [url]
Open a new tab, optionally navigating to a URL.
vibe-check tab-new
vibe-check tab-new https://docs.example.com
vibe-check tab-switch <index|url>
Switch to a tab by its index or URL.
vibe-check tab-switch 0
vibe-check tab-switch https://docs.example.com
vibe-check tab-close [index]
Close a tab. Defaults to current tab.
vibe-check tab-close
vibe-check tab-close 1
Daemon Commands
vibe-check daemon start
Start the background daemon. The daemon keeps Chrome running between commands for faster execution.
vibe-check daemon status
Check if the daemon is running.
vibe-check daemon stop
Stop the daemon and close the browser.
Global Flags
| Flag | Description | Example |
|---|---|---|
--headless |
Hide browser window | vibe-check navigate https://example.com --headless |
--json |
Output as JSON | vibe-check find "h1" --json |
--oneshot |
One-shot mode (no daemon) | vibe-check navigate https://example.com --oneshot |
-v, --verbose |
Debug logging | vibe-check click "button" -v |
--wait-open N |
Wait N seconds after navigation | vibe-check navigate https://spa.example.com --wait-open 3 |
--wait-close N |
Keep browser open N seconds before closing | Useful for debugging |
Common Test Automation Patterns
Login Flow
vibe-check navigate https://app.example.com/login
vibe-check type "input[name=email]" "test@example.com"
vibe-check type "input[name=password]" "TestPass123"
vibe-check click "button[type=submit]"
vibe-check wait "h1" # Wait for dashboard to load
vibe-check text "h1" # Verify: "Welcome, Test User"
Form Validation
vibe-check navigate https://app.example.com/register
vibe-check click "button[type=submit]" # Submit empty form
vibe-check text ".error" # Read error messages
vibe-check screenshot -o validation-errors.png
Data Extraction
vibe-check navigate https://app.example.com/users
vibe-check eval "JSON.stringify([...document.querySelectorAll('tr')].map(r => r.textContent))"
Multi-Page Flow
vibe-check navigate https://shop.example.com
vibe-check click ".product:first-child a"
vibe-check click "#add-to-cart"
vibe-check navigate https://shop.example.com/cart
vibe-check text ".cart-total"
vibe-check click "#checkout"