由Selenium创作者推出的新一代浏览器自动化框架,统一支持AI驱动和人工操作,降低Web自动化、测试和爬虫的复杂度。
编码 Agent 的验证层。
Vibium 为 AI agent 提供了检查其工作的工具。安装 vibium skill,你的 agent 就能够导航页面、填充表单、点击按钮和截图——全部通过简单的 CLI 命令。也可作为 MCP 服务器以及 JS/TS、Python 和 Java 客户端库使用。
新手入门?使用 JavaScript、Python 或 Java 开始——5 分钟从零到 hello world。
安装为 skill——你的 agent 立刻掌握完整的浏览器自动化工具箱。
一次安装,浏览器自动下载,默认可见。
建立在 WebDriver BiDi 之上,而非由大公司控制的专有协议。
单个约 10MB 的二进制文件。无运行时依赖。
可作为 CLI skill、MCP 服务器或 JS/Python/Java 库使用。
npm install -g vibium
npx skills add https://github.com/VibiumDev/vibium --skill vibe-check
第一条命令安装 Vibium 和 vibium 二进制文件,并下载 Chrome。第二条命令将 skill 安装到 {project}/.agents/skills/vibium。
skills 是开放的 agent skill CLI——一个 AI agent skill 的包管理器。无需全局安装;npx 直接运行。
# 地图和交互(核心工作流)
vibium go https://var.parts # 导航到 URL
vibium map # 地图交互元素 → @e1, @e2, ...
vibium click @e1 # 使用引用点击
vibium diff map # 查看变化了什么
# 查找元素(语义化——无需 CSS)
vibium find text "Sign In" # 按可见文本查找
vibium find label "Email" # 按表单标签查找
vibium find placeholder "Search" # 按占位符查找
vibium find role button # 按 ARIA 角色查找
# 读取和捕获
vibium text # 获取所有页面文本
vibium screenshot -o page.png # 捕获截图
vibium screenshot --annotate -o a.png # 带元素标签的注解截图
vibium pdf -o page.pdf # 将页面保存为 PDF
vibium eval "document.title" # 运行 JavaScript
# 等待事物
vibium wait ".modal" # 等待元素出现
vibium wait url "/dashboard" # 等待 URL 改变
vibium wait text "Success" # 等待页面上的文本
# 记录会话
vibium record start # 带截图的录制
vibium record stop # 停止并保存到 record.zip
# 表单和输入
vibium fill @e2 "hello@example.com" # 使用引用填充输入
vibium select @e3 "US" # 选择下拉菜单选项
vibium check @e4 # 选中复选框
vibium press Enter # 按键
完整命令列表:SKILL.md
claude mcp add vibium -- npx -y vibium mcp # Claude Code
gemini mcp add vibium npx -y vibium mcp # Gemini CLI
参见 MCP 设置指南了解选项和故障排除。
npm install vibium # JavaScript/TypeScript
pip install vibium # Python
implementation 'com.vibium:vibium:26.3.18'
<dependency>
<groupId>com.vibium</groupId>
<artifactId>vibium</artifactId>
<version>26.3.18</version>
</dependency>
此操作安装 Vibium 二进制文件并自动下载 Chrome。无需手动浏览器设置。
import { browser } from 'vibium'
const bro = await browser.start()
const vibe = await bro.page()
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 bro.stop()
const { browser } = require('vibium/sync')
const fs = require('fs')
const bro = browser.start()
const vibe = bro.page()
vibe.go('https://example.com')
const png = vibe.screenshot()
fs.writeFileSync('screenshot.png', png)
const link = vibe.find('a')
link.click()
bro.stop()
# 异步
from vibium.async_api import browser
# 同步(默认)
from vibium import browser
import asyncio
from vibium.async_api import browser
async def main():
bro = await browser.start()
vibe = await bro.page()
await vibe.go("https://example.com")
png = await vibe.screenshot()
with open("screenshot.png", "wb") as f:
f.write(png)
link = await vibe.find("a")
await link.click()
await bro.stop()
asyncio.run(main())
from vibium import browser
bro = browser.start()
vibe = bro.page()
vibe.go("https://example.com")
png = vibe.screenshot()
with open("screenshot.png", "wb") as f:
f.write(png)
link = vibe.find("a")
link.click()
bro.stop()
var bro = Vibium.start();
var vibe = bro.page();
vibe.go("https://example.com");
var png = vibe.screenshot();
Files.write(Path.of("screenshot.png"), png);
var link = vibe.find("a");
link.click();
bro.stop();
┌──────────────────────────────────────┐
│ LLM / Agent │
│ (Claude Code, Codex, Gemini, etc.) │
└──────────────────────────────────────┘
▲ ▲
│ CLI (Bash) │ MCP (stdio)
▼ ▼
┌───────────────────────────────────┐
│ Vibium binary │
│ │
│ ┌──────────────┐ ┌────────────┐ │
│ │ CLI Commands │ │ MCP Server │ │
│ └─────┬────────┘ └──────┬─────┘ │ ┌──────────────────┐
│ └───────▲─────────┘ │ │ │
│ │ │ │ │
│ ┌──────▼───────┐ │ BiDi │ Chrome Browser │
│ │ BiDi Proxy │ │◄──────►│ │
│ └──────────────┘ │ │ │
└───────────────────────────────────┘ └──────────────────┘
▲
│ WebSocket BiDi :9515
▼
┌──────────────────────────────────────┐
│ Client Libraries │
│ (js/ts | python | java) │
│ │
│ ┌─────────────────┐ ┌────────────┐ │
│ │ Async API │ │ Sync API │ │
│ │ await vibe.go() │ │ vibe.go() │ │
│ └─────────────────┘ └────────────┘ │
└──────────────────────────────────────┘
参见 CONTRIBUTING.md 了解开发设置和指南。源代码构建需要 Go、Node.js/npm 和 Java 21,因为默认 make 目标会构建 Go 二进制文件、JS 客户端和 Java 客户端。
V1 专注于核心循环:通过 CLI、MCP 和客户端库的浏览器控制。
参见 ROADMAP.md 了解计划中的功能:
Cortex(内存/导航层)
Retina(录制扩展)