Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
VIBATCHIUM_SESSIONNoActive session resolution: `--session FLAG` → `$VIBATCHIUM_SESSION` env → `~/.config/vibatchium/active-session` → `default`.default
VIBATCHIUM_IDLE_FREEZENoSet to '0' to disable freezing of idle session renderer processes. Default is enabled.1
VIBATCHIUM_SECRETS_KEYNoOptional key for the encrypted credential vault. If not set, the OS keyring is used.
VIBATCHIUM_MAX_SESSIONSNoCap on number of parallel browser sessions. Default is 8.8
VIBATCHIUM_IDLE_FREEZE_AFTERNoSeconds with no verb before a launched session's renderer processes are SIGSTOPped. Default is 90.90
VIBATCHIUM_SESSION_RAM_FLOOR_MBNoMinimum free memory required to launch a new session, in MB. If set, daemon refuses to launch a new session when free memory is low.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
startB

Start a browser session (cold-launch real Chrome).

attachA

Attach to an existing Chrome via CDP (use after manual login on a Cloudflare-walled site).

stopB

Stop the browser session.

statusB

Daemon + session status.

verify_urlA

Fast pre-check (DNS, optional HTTP HEAD) for a URL before go commits to a 30s navigation timeout. Catches typos and dead domains in ~50ms instead of 30s.

set_log_verbsA

Toggle the daemon's per-verb DEBUG audit log at runtime. Useful for non-trivial runs where you want a full call trail; the toggle's response returns the daemon-log path to tail.

exploreA

USE THIS WHEN WebFetch/WebSearch/curl GOT BLOCKED — a 403, a Cloudflare/DataDome "Just a moment..." challenge, a login/paywall, or an empty "JavaScript is required" shell: don't report failure, use this — patchright clears most such walls cold. ONE-CALL 'look at this URL', TEXT-FIRST. Does verify_url → auto-start session if needed (headless) → go → extract text. It does NOT screenshot by default: read and navigate with the returned text/selectors, and a screenshot is captured only as a FALLBACK when the page yields no usable text (canvas/image/blank SPA). This is the 80% case of 'just show me what's on this page' — use it instead of separate start/go/text calls unless you need multi-step interaction. Pass screenshot='always' to force a screenshot, 'never' to suppress even the fallback; when one is captured it comes back as a viewable image, not base64 text. Without an explicit session it runs on an OFF-BUDGET transient ephemeral session (0.7.0) — it never competes with persistent sessions for a slot and is auto-deleted afterward, so it won't touch your 'default' session.

expectA

ONE-CALL verification gate. Assert the page reached an expected state — composes element-state / page-text / URL checks plus a native challenge-wall check into a single {passed, failures[]} verdict. Use after an action to confirm it landed (or that you got soft-blocked) instead of stitching wait/text/url/screenshot calls. Every check is optional.

goA

Navigate to a URL in the stealth browser, then pair with extract/text/html/map. Reach for this (or explore) when WebFetch/curl was blocked — a 403, a Cloudflare/DataDome "Just a moment..." challenge, a login/paywall, or a JavaScript-only page that returns no usable HTML — or when the page needs a real browser.

backC

Browser back.

forwardD

Browser forward.

reloadB

Reload current page.

urlA

Get current URL.

titleA

Get current page title.

textA

Get inner text (whole page or a target — @eN, @text:Foo, @label:Email, CSS, etc.).

htmlB

Get HTML (whole page or a target — @eN, @text:Foo, @label:Email, CSS, etc.).

extractA

Clean, LLM-ready Markdown of the page (or a target subtree) — boilerplate (nav/footer/aside/scripts) stripped, headings/links/lists/code preserved. A drop-in for Crawl4AI/Firecrawl-style scraping on the AUTHENTICATED pages those stateless tools can't reach. Returns markdown TEXT (never a base64 screenshot), capped by max_chars. mode: markdown (default) | links (deduped {url,text}, absolute post-hydration URLs) | assets ({url,type,rel?}, data: dropped) | main (main-content only via density scorer).

extract_fieldsA

Declarative STRUCTURED extract: pass a {name: selector} map and get back ONE JSON object of values in a single call — against our real authenticated Chrome DOM (a login-walled / SPA page stateless scrapers can't reach). Grammar: name[]=array, sel@attr=attribute, sel@html=innerHTML, bare=text. Optional target scopes selectors to a subtree. Returns {fields, matched, misses, errors} — misses/errors let you fix a selector without re-reading the page. Reads text/attr/innerHTML only, never input values.

detect_formsA

Structured map of every on the page (plus a formless-controls group for SPAs) — against our real authenticated Chrome DOM. Each field carries a ready-to-use locator string (pipe straight into fill/click), plus type, name, label, required, options and checked/filled state. A free-text field's typed value is withheld unless values=true, and even then it's redacted when a type/name/autocomplete heuristic flags it as a password/credential/payment secret (best-effort — don't pass values=true on untrusted pages). Returns {forms, count}.

candidatesA

List EVERY element a target resolves to, so an ambiguous locator can be disambiguated instead of failing strict mode. Returns {target, count, candidates:[{index, tag, role, name, text, bbox}], truncated}. Act on one with click/fill/type/hover passing index=N.

attrB

Get an HTML attribute value from an element.

valueB

Get the current value of an input/textarea/select.

evalA

Evaluate a JS expression in the page (isolated context per Patchright default — window.X = ... mutations are NOT visible to page JS; use eval_handle to retain references).

mapB

Snapshot actionable elements and assign @eN refs (uses Playwright aria_snapshot mode='ai').

diff_mapC

Diff current snapshot vs the previous one.

clickC

Click an @eN ref or CSS selector.

dblclickB

Double-click an @eN ref or CSS selector.

focusA

Focus an element (without clicking).

selectB

Pick option(s) on a ; choose by value/label/index.

fillB

Clear an input and fill it with text. With use_secret, value comes from the encrypted vault.

typeB

Type text (key-by-key) into an element.

hoverC

Hover over an element.

pressA

Press a key on a specific element (e.g. Enter on @e3).

keysB

Press a key combination (e.g. 'Control+a', 'Enter').

checkC

Check a checkbox / radio.

uncheckB

Uncheck a checkbox.

scrollC

Scroll the page or a target element into view.

is_stateC

Check element state (visible/enabled/checked/...).

screenshotA

Capture a screenshot. With no path it returns a viewable image (not base64 text); with a path it saves the PNG and returns the path. With tiles=true it slices a full-page capture into fixed-height tiles written to DISK (returns their paths + count, never base64) — for layout-heavy pages a vision-capable caller then reads tile-by-tile. Prefer reading the page text/selectors first — only screenshot when you actually need the pixels.

wait_selectorB

Wait until a CSS selector reaches a state.

wait_refC

Wait until an @eN ref reaches a state.

wait_urlB

Wait until the URL matches a glob/regex.

wait_loadB

Wait for a page load state (load/domcontentloaded/networkidle).

wait_fnB

Wait until a JS expression returns truthy.

pagesC

List all open browser tabs.

page_newA

Open a new tab and switch to it.

page_switchC

Switch to tab by index.

page_closeA

Close the current tab; the next tab becomes active.

findC

Locate elements by semantic strategy (text/label/placeholder/role/testid/xpath/alt/title/css).

countB

Count matching elements for a selector or @eN ref.

contentC

Replace the page HTML wholesale via page.set_content.

framesA

List all live frames with name + url + depth + active flag.

frameB

Switch active frame by name or URL substring (omit both to clear).

mouseC

Mouse control at pixel coordinates.

uploadC

Set files on an input[type=file] target.

pdfC

Save the current page as PDF.

highlightB

Briefly outline an @eN ref or selector for visual debugging.

screenshot_annotateB

Screenshot with @eN bounding-box overlays (vision-LLM friendly).

map_compactA

One-line-per-element rendering of the snapshot (token-efficient): @eN role "name" [state…], preserving state ([checked]/[disabled]/[expanded]/[level=N]). interactive=only actionable roles; bbox=append real bounding_box() coords (bbox=x,y,w,h) — genuine layout geometry.

observeB

Plan a verb + target for an intent without executing.

actD

Observe + execute the resulting plan in one shot.

profile_listB

List all profiles and the active one (alias of session_list).

profile_newB

Create a new named profile (alias of session_new).

profile_useB

Set the active profile (alias of session_use).

profile_deleteB

Delete a profile directory (alias of session_delete).

session_newA

Create a new on-disk session/profile dir (does NOT launch Chrome).

session_listB

List every on-disk session + which are currently running.

session_useB

Set the active session (persisted to active-session file).

session_switchC

Alias for session_use.

session_closeB

Stop Chrome for one session (profile dir preserved).

session_close_allC

Stop Chrome for every running session.

session_deleteA

Delete a session's profile dir on disk (not active/default).

session_leaseA

Acquire/renew an exclusive advisory lease on a running session (0.7.0). Returns a token; present it as the lease arg on subsequent calls so other clients get a 'busy' error instead of clobbering the shared page.

session_releaseA

Release a session lease — present the token via the lease arg, or force=true to break it (operator override).

session_lease_infoB

Report the lease state for a session (never returns the token).

cleanA

Housekeeping — reclaim disk from stale profile dirs, superseded Chrome cache dirs, leftover Chrome lock files, regenerable caches, and the daemon log. DRY-RUN by default; pass apply=true to actually delete. Never touches the default/active/running sessions. Returns a per-category {count, bytes} report.

humanize_onA

Enable humanlike mouse (Bezier paths, gaussian dwell, sin scroll) for current session.

humanize_offB

Disable humanize for current session.

humanize_statusA

Report whether humanize is on for current session.

vision_clickA

Find a UI element by verbal description (via Claude vision) and click it. Fallback for canvas/Flutter/Unity pages where AX-tree fails. Requires [llm] extra.

vision_findA

Return coords + confidence for a described element (no click).

vision_typeB

vision_click the described field, then type the given text.

vision_statsB

Return cumulative vision API usage (calls, cache_hits, tokens, cost_usd) for session.

vision_clear_cacheA

Drop the on-disk vision coords cache.

vision_budgetC

Report today + lifetime vision spend vs VIBATCHIUM_VISION_MAX_*_USD caps. reset='today'|'lifetime'|'all' clears the spend log.

dismiss_bannersB

Heuristically dismiss cookie/consent/newsletter banners.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

C2.7/5.0

Scored across 86 tools

Disambiguation3/5

Most tools target distinct browser actions, but there are several exact aliases (session_use/session_switch, profile_*/session_*) and overlapping locator/interaction families (find/map/candidates, text/html/extract, click/vision_click) that create real selection ambiguity. The descriptions help, but the boundaries between waits, actions, and extraction modes are not always obvious.

Naming Consistency3/5

The set predominantly uses imperative snake_case verbs, but it mixes bare noun/state names like url, title, text, html, and status with verb_noun composites like verify_url, extract_fields, wait_selector, and set_log_verbs. The alias families (profile_*, session_*, vision_*) are internally consistent, but the overall pattern is uneven.

Tool Count1/5

86 tools is an extreme count by any agent-facing standard, far beyond the 50+ threshold for extreme mismatch. The count is inflated by aliases, near-duplicate action variants, and overlapping wait/vision/locator families that could be consolidated without losing capability.

Completeness4/5

The browser automation lifecycle is very thoroughly covered: sessions, navigation, extraction, interaction, waits, frames, tabs, screenshots, forms, and vision fallbacks are all present. Minor gaps exist around standard browser primitives like cookie/localStorage management and network request interception, but they are non-fatal for the advertised stealth-scraping use case.

Maintenance

ActivityActive
ResponsivenessUnresponsive