Browser automation without the drama.
Vibium is browser automation infrastructure built for AI agents. A single Go 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.
| 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.
Two flavors: async (Promise-based) and sync (blocking).
Async API:
import { browser } from "vibium";
const vibe = await browser.launch();
await vibe.go("https://example.com");
const el = await vibe.find("button.submit");
await el.click();
await el.type("hello");
const png = await vibe.screenshot();
await vibe.quit();Sync API:
import { browserSync } from "vibium";
const vibe = browserSync.launch();
vibe.go("https://example.com");
const el = vibe.find("button.submit");
el.click();
el.type("hello");
const png = vibe.screenshot();
vibe.quit();One command to add browser control to Claude Code:
claude mcp add vibium -- npx -y vibiumThat's it. No npm install needed. The first run downloads everything automatically.
| Tool | Description |
|---|---|
browser_launch |
Start browser (headless 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 |
npm install vibiumThis 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 |
| Linux | arm64 | ✅ 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
- 2025-12-20: Day 10 - MCP Server
- 2025-12-19: Day 9 - Actionability
- 2025-12-19: Day 8 - Elements & Sync API
- 2025-12-17: Halfway There
- 2025-12-16: Week 1 Progress
- 2025-12-11: V1 Announcement
Apache 2.0