The verification layer for coding agents. Vibium gives AI agents the tools they need to check their work. Install the vibium skill and your agent can navigate pages, fill forms, click buttons, and take screenshots — all through simple CLI commands.
$ npx -y skills add vibiumdev/vibium --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: vibiumdev/vibium
What's inside
The verification layer for coding agents.
Vibium gives AI agents the tools they need to check their work. Install the vibium skill and your agent can navigate pages, fill forms, click buttons, and take screenshots — all through simple CLI commands. Also available as an MCP server and as JS/TS, Python, and Java client libraries.
New here? Get started in JavaScript, Python, or Java — zero to hello world in 5 minutes.
npm install -g vibium
npx skills add https://github.com/VibiumDev/vibium --skill vibe-check
The first command installs Vibium and the vibium binary, and downloads Chrome. The second installs the skill to {project}/.agents/skills/vibium.
skillsis the open agent skills CLI — a package manager for AI agent skills. No global install needed;npxruns it directly.
# Map & interact (the core workflow)
vibium go https://var.parts # navigate to URL
vibium map # map interactive elements → @e1, @e2, ...
vibium click @e1 # click using ref
vibium diff map # see what changed
# Find elements (semantic — no CSS needed)
vibium find text "Sign In" # find by visible text
vibium find label "Email" # find by form label
vibium find placeholder "Search" # find by placeholder
vibium find role button # find by ARIA role
# Read & capture
vibium text # get all page text
vibium screenshot -o page.png # capture screenshot
vibium screenshot --annotate -o a.png # annotated with element labels
vibium pdf -o page.pdf # save page as PDF
vibium eval "document.title" # run JavaScript
# Wait for things
vibium wait ".modal" # wait for element to appear
vibium wait url "/dashboard" # wait for URL change
vibium wait text "Success" # wait for text on page
# Record sessions
vibium record start # record with screenshots
vibium record stop # stop and save to record.zip
# Forms & input
vibium fill @e2 "hello@example.com" # fill input using ref
vibium select @e3 "US" # pick dropdown option
vibium check @e4 # check a checkbox
vibium press Enter # press a key
Full command list: SKILL.md
Alternative: MCP server (for structured tool use instead of CLI):
claude mcp add vibium -- npx -y vibium mcp # Claude Code
gemini mcp add vibium npx -y vibium mcp # Gemini CLI
See MCP setup guide for options and troubleshooting.
npm install vibium # JavaScript/TypeScript
pip install vibium # Python
Java (Gradle):
implementation 'com.vibium:vibium:26.3.18'
Java (Maven):
<dependency>
<groupId>com.vibium</groupId>
<artifactId>vibium</artifactId>
<version>26.3.18</version>
</dependency>
This installs the Vibium binary and downloads Chrome automatically. No manual browser setup required.
Async API:
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()
Sync API:
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()
# Async
from vibium.async_api import browser
# Sync (default)
from vibium import browser
Async API:
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())
Sync API:
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() │ │
│ └─────────────────┘ └────────────┘ │
└──────────────────────────────────────┘
| Platform | Architecture | Status |
|---|---|---|
| Linux | x64 | ✅ Supported |
| macOS | x64 (Intel) | ✅ Supported |
| macOS | arm64 (Apple Silicon) | ✅ Supported |
| Windows | x64 | ✅ Supported |
Chrome is the default browser; Firefox is also supported (how to switch). Firefox 154+ can record video of a session.
See CONTRIBUTING.md for development setup and guidelines.
Source builds require Go, Node.js/npm, and Java 21 because the default make
target builds the Go binary, JS client, and Java client.
V1 focuses on the core loop: browser control via CLI, MCP, and client libraries.
See ROADMAP.md for planned features:
Apache 2.0
.github/
dependabot.yml
workflows/
test.yml
.gitignore
.gitmodules
apps/
CLAUDE.md
clicker/
cmd/
clicker/
a11y_tree.go
attr.go
back.go
check_cmd.go
click.go
completion.go
content.go
cookies.go
count.go
daemon_client_test.go
daemon_client.go
daemon_cmd.go
daemon_unix.go
daemon_windows.go
dblclick.go
diagnostics.go
dial_unix.go
dial_windows.go
dialog.go
diff.go
download.go
drag.go
eval.go
fill.go
find.go
focus.go
forward.go
frame.go
frames.go
geolocation.go
helpers.go
highlight.go
hover.go
html.go
is.go
keys.go
main.go
map.go
mcp_cmd.go
media.go
mouse.go
navigate.go
output.go
page.go
pages.go
pdf.go
pipe_unix.go
pipe_windows.go
pipe.go
press.go
record.go
reload.go
screenshot.go
scroll.go
select_cmd.go
serve.go
skill.go
sleep_cmd.go
start.go
stop.go
storage.go
text.go
timeout_flag_test.go
timeout_flag.go
title.go
type_cmd.go
uncheck.go
upload.go
url_cmd.go
value.go
viewport.go
wait_cmd.go
window.go
go.mod
go.sum
internal/
agent/
handlers_browser_launch_test.go
handlers_close_test.go
handlers.go
schema.go
server.go
api/
actionability.go
clock_script.go
handlers_a11y.go
handlers_capture.go
handlers_clock.go
handlers_dialog.go
handlers_download.go
handlers_elements.go
handlers_emulation.go
handlers_frames.go
handlers_input.go
handlers_interaction.go
handlers_lifecycle.go
handlers_navigation_test.go
handlers_navigation.go
handlers_network.go
handlers_recording.go
handlers_state.go
handlers_storage.go
handlers_websocket.go
helpers.go
navigation_test.go
navigation.go
pierce.go
pipe.go
prompt_test.go
prompt.go
recording_test.go
recording_video_test.go
recording_video.go
recording.go
router_test.go
router.go
script_result_test.go
server_test.go
server.go
session.go
version.go
bidi/
browsingcontext.go
connect_test.go
connect.go
connection.go
element.go
input.go
keys.go
protocol.go
script_result_test.go
script_test.go
script.go
session_test.go
session.go
storage.go
browser/
installer_firefox.go
installer.go
launcher_firefox_test.go
launcher_firefox.go
launcher_test.go
launcher_unix.go
launcher_windows.go
launcher.go
sandbox_unix_test.go
sandbox_unix.go
sandbox_windows.go
daemon/
client.go
daemon.go
dial_unix.go
dial_windows.go
listener_unix.go
listener_windows.go
pidfile_test.go
pidfile.go
process_unix.go
process_windows.go
router.go
status.go
errors/
errors.go
log/
log.go
paths/
paths_test.go
paths.go
process/
process_unix.go
process_windows.go
process.go
urlmatch/
testdata/
url-patterns.json
urlmatch_test.go
urlmatch.go
clients/
java/
build.gradle.kts
gradle/
wrapper/
gradle-wrapper.jar
gradle-wrapper.properties
gradlew
gradlew.bat
settings.gradle.kts
src/
main/
java/
com/
vibium/
Browser.java
BrowserContext.java
CLI.java
Clock.java
ConsoleMessage.java
Dialog.java
Download.java
Element.java
errors/
BrowserCrashedException.java
ElementNotFoundException.java
VibiumConnectionException.java
VibiumException.java
VibiumNotFoundException.java
VibiumTimeoutException.java
internal/
BiDiClient.java
BinaryResolver.java
BrowserInstaller.java
PlatformDetector.java
VibiumProcess.java
Keyboard.java
Mouse.java
Page.java
Recording.java
Request.java
Response.java
Route.java
Touch.java
types/
A11yNode.java
A11yOptions.java
BoundingBox.java
ChunkOptions.java
ClockOptions.java
ContinueOptions.java
Cookie.java
ElementInfo.java
FindOptions.java
FulfillOptions.java
GeoCoords.java
MediaOptions.java
MouseOptions.java
OriginState.java
RecordingOptions.java
RecordingResult.java
ScreenshotOptions.java
ScrollOptions.java
SelectorOptions.java
SetCookieParam.java
SourceLocation.java
StartOptions.java
StorageState.java
ViewportSize.java
WaitOptions.java
WindowInfo.java
WindowOptions.java
Vibium.java
WebSocketInfo.java
test/
java/
com/
vibium/
A11yTest.java
BrowserInstallerTest.java
BrowserTest.java
ContextTest.java
DialogTest.java
ElementTest.java
EmulationTest.java
ErrorTest.java
InputTest.java
JavaClusterFixTest.java
PageFindTest.java
PageNavigationTest.java
ProcessTest.java
TestServer.java
WireContractTest.java
javascript/
package.json
src/
bidi/
client.ts
index.ts
types.ts
browser.ts
clicker/
binary.ts
index.ts
platform.ts
process.ts
clock.ts
console.ts
context.ts
dialog.ts
download.ts
element.ts
index.ts
network.ts
page.ts
recording.ts
route.ts
sync/
bridge.ts
browser.ts
clock.ts
context.ts
dialog.ts
element.ts
index.ts
keyboard.ts
page.ts
recording.ts
route.ts
worker.ts
utils/
debug.ts
errors.ts
match.ts
websocket.ts
tsconfig.json
tsup.config.ts
var-parts-trace.zip
python/
pyproject.toml
README.md
src/
vibium/
__init__.py
_sync_base.py
_types.py
async_api/
__init__.py
browser.py
clock.py
console.py
context.py
dialog.py
download.py
element.py
network.py
page.py
recording.py
route.py
websocket_info.py
binary.py
cli.py
client.py
errors.py
sync_api/
__init__.py
browser.py
clock.py
context.py
dialog.py
element.py
page.py
recording.py
route.py
tests/
__init__.py
test_basic.py
CODE_OF_CONDUCT.md
CONTRIBUTING.md
docs/
explanation/
actionability.md
bidi-data-collector.md
client-implementation-guide.md
process-cleanup.md
recording-format.md
sync-async-client-architecture.md
webdriver-bidi.md
how-to-guides/
concurrent-cli-sessions.md
debugging.md
local-dev-setup-mac.md
local-dev-setup-x86-linux.md
local-dev-setup-x86-windows.md
publish-java-maven-central.md
publishing-new-releases.md
record-video.md
screenshots.md
slow-chrome-launch-in-macos-vm.md
test-web-components.md
use-vibium-as-a-bidi-endpoint.md
using-firefox.md
images/
recording-sample.gif
recording-sample.webm
vibium-halfway-there.png
plans/
2026-07-04-cli-multi-session-daemon.md
README.md
README.md
reference/
api.md
... 240 moreFAQ
vibium is a Claude Code plugin with 1 hand-picked skill for testing work, indexed on Flowy. Install it with the command on its page. It includes vibe-check. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.