π Explore this insightful post from Hacker News π
π Category:
π Hereβs what youβll learn:
Browser automation without the drama.
Vibium is browser automation infrastructure built for AI agents. A single binary handles browser lifecycle, WebDriver BiDi protocol, and exposes an MCP server β so Claude Code (or any MCP client) can drive a browser with zero setup. Works great for AI agents, test automation, and anything else that needs a browser.
New here? Getting Started Tutorial β zero to hello world in 5 minutes.
| Component | Purpose | Interface |
|---|---|---|
| Clicker | Browser automation, BiDi proxy, MCP server | CLI / stdio / WebSocket :9515 |
| JS Client | Developer-facing API | npm package |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LLM / Agent β
β (Claude Code, Codex, Gemini, Local Models) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β²
β MCP Protocol (stdio)
βΌ
βββββββββββββββββββββββ
β Vibium Clicker β
β β
β βββββββββββββββββ β
β β MCP Server β β
β βββββββββ²ββββββββ β ββββββββββββββββββββ
β β β β β
β βββββββββΌββββββββ βWebSocketβ β
β β BiDi Proxy β ββββββββββΊβ Chrome Browser β
β βββββββββββββββββ β BiDi β β
β β β β
βββββββββββββββββββββββ ββββββββββββββββββββ
β²
β WebSocket BiDi :9515
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β JS/TS Client β
β npm install vibium β
β β
β βββββββββββββββββββ βββββββββββββββββββ β
β β Async API β β Sync API β β
β β await vibe.go() β β vibe.go() β β
β β β β β β
β βββββββββββββββββββ βββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
A single Go binary (~10MB) that does everything:
- Browser Management: Detects/launches Chrome with BiDi enabled
- BiDi Proxy: WebSocket server that routes commands to browser
- MCP Server: stdio interface for LLM agents
- Auto-Wait: Polls for elements before interacting
- Screenshots: Viewport capture as PNG
Design goal: The binary is invisible. JS developers just npm install vibium and it works.
// Option 1: require (REPL-friendly)
const What do you think? = require('vibium')
// Option 2: dynamic import (REPL with --experimental-repl-await)
const β‘ = await import('vibium')
// Option 3: static import (in .mjs or .ts files)
import What do you think? from 'vibium'
Sync API:
const fs = require('fs')
const Share your opinion below! = require('vibium')
const vibe = browserSync.launch()
vibe.go('https://example.com')
const png = vibe.screenshot()
fs.writeFileSync('screenshot.png', png)
const link = vibe.find('a')
link.click()
vibe.quit()
Async API:
const fs = await import('fs/promises')
const { browser } = await import('vibium')
const vibe = await browser.launch()
await vibe.go('https://example.com')
const png = await vibe.screenshot()
await fs.writeFile('screenshot.png', png)
const link = await vibe.find('a')
await link.click()
await vibe.quit()
One command to add browser control to Claude Code:
claude mcp add vibium -- npx -y vibium
That’s it. No manual steps needed. Chrome downloads automatically during setup.
| Tool | Description |
|---|---|
browser_launch |
Start browser (visible by default) |
browser_navigate |
Go to URL |
browser_find |
Find element by CSS selector |
browser_click |
Click an element |
browser_type |
Type text into an element |
browser_screenshot |
Capture viewport (base64 or save to file with --screenshot-dir) |
browser_quit |
Close browser |
This automatically:
- Installs the Clicker binary for your platform
- Downloads Chrome for Testing + chromedriver to platform cache:
- Linux:
~/.cache/vibium/ - macOS:
~/Library/Caches/vibium/ - Windows:
%LOCALAPPDATA%\vibium\
- Linux:
No manual browser setup required.
Skip browser download (if you manage browsers separately):
VIBIUM_SKIP_BROWSER_DOWNLOAD=1 npm install vibium
| Platform | Architecture | Status |
|---|---|---|
| Linux | x64 | β Supported |
| macOS | x64 (Intel) | β Supported |
| macOS | arm64 (Apple Silicon) | β Supported |
| Windows | x64 | β Supported |
As a library:
import { browser } from "vibium";
const vibe = await browser.launch();
await vibe.go("https://example.com");
const el = await vibe.find("a");
await el.click();
await vibe.quit();
With Claude Code:
Once installed via claude mcp add, just ask Claude to browse:
“Go to example.com and click the first link”
See CONTRIBUTING.md for development setup and guidelines.
V1 focuses on the core loop: browser control via MCP and JS client.
See V2-ROADMAP.md for planned features:
- Python and Java clients
- Cortex (memory/navigation layer)
- Retina (recording extension)
- Video recording
- AI-powered locators
Apache 2.0
{π¬|β‘|π₯} {What do you think?|Share your opinion below!|Tell us your thoughts in comments!}
#οΈβ£ #VibiumDevvibium #Browser #automation #agents #humans
π Posted on 1766601549
