MCP

Drive GodBrowser Cortex from your AI client

Run anti-fingerprint browser & scrape workflows across your own node cluster — at scale — straight from Claude or any MCP client. Point your client at one URL, authorize in your browser, and Cortex shards the run across the nodes you've enrolled.

Connect

A remote, streamable-HTTP MCP server — zero install, no local process. Add it to Claude Code with one command:

claude mcp add --transport http godbrowser-mcp \
  https://mcp.godbrowser.io

Or drop this into any MCP client's mcpServers config:

{
  "mcpServers": {
    "godbrowser-mcp": {
      "type": "http",
      "url": "https://mcp.godbrowser.io"
    }
  }
}

No key to paste. The first time your client connects it opens the GodBrowser consent screen in your browser — approve it and a per-device token is minted automatically under your account. Revoke any device from the dashboard → API Keys.

Tools

Each tool scopes to your account via your authorized session — submit, poll, fetch. The surface never exposes a node, our internals, or a browser-control url; it's strictly your workflows.

Knowlearn GodBrowser with no external docs
godbrowser_helpLearns you GodBrowser end to end. Call it bare for a compact onboarding guide — install, auth, the two surfaces, captcha and workflows — plus the automation playbooks and an index of the flag catalog. Pass section to read one topic (install, auth, surfaces, captcha, workflows, playbook, params, or a family name like persona/persist/proxy), or a query to filter the --bot-* flags. The full flag catalog is large, so fetch it deliberately with section:"params" or a query. Same corpus as the godbrowser://params/all resource.
2 parameters
queryoptionala param name or keyword to filter the --bot-* flag catalog, e.g. "persist", "--bot-os", "proxy"
sectionoptionalread one topic: "install" | "auth" | "surfaces" | "captcha" | "proxy" (the account egress pool + proxy flags) | "workflows" | "playbook" | "params" (the full flag catalog, large) | a family name (persona/persist/autoclean/ai/busymate/cdp). Omit both query and section for the onboarding guide + index.
godbrowser_meReturns the authenticated account's identity (account_id, owner_user_id, email, name, role) — who this API key / session is operating as. Owner-scoped: returns only the caller's own identity, never another tenant, never a secret.
godbrowser_workflowsList the built-in workflows + the persona/manifest schema + an example — self-describing, so call it first. It also documents custom_targets: how to run your OWN url + field map at scale (extract, the scrape templates, a saved recipe, and the requests-only playbook) rather than only the curated demo datasets.
Drivea live session you steer call-by-call under a coherent persona
Session & persona
godbrowser_closeEnd the session and free its slot; returns the duration and how many actions ran.
1 parameter · 1 required
session_idrequiredthe session_id from godbrowser_launch
godbrowser_launchStart a live instance under a coherent per-seed device persona; returns a session_id to thread through the calls below. Choose the egress at launch with proxy (any provider format) or proxy_provider/proxy_country to pick an exit out of your configured pool. When this machine is signed in to a GodBrowser account, persist now defaults to ON — the session's logins are saved to a stable default profile and are restorable from any computer. Pass persist:false for a throwaway session that leaves nothing behind.
16 parameters
osoptionaldevice OS: windows | macos | linux (the node OS matches the persona so the host fingerprint stays coherent)
browseroptionalbrowser engine: chrome | edge | firefox | safari
seedoptionala stable seed string -> a stable, repeatable device identity (same seed = same device). It is ALSO the name this session is saved under: give each account its own seed and you can restore that exact login later; reuse one seed for two accounts and the second overwrites the first. The seed actually used comes back as persona_seed — record it with the account.
persistoptionalDEFAULT ON when this machine is signed in to a GodBrowser account: your logins are saved and restorable from any computer. Pass false for a throwaway session that must leave no trace in your account.
countryoptionalpreferred region/country for node placement, e.g. "us"
captcha_provideroptionalcaptcha solver for this session: "2captcha" (default) or "anticaptcha". The fleet resolves the matching key server-side; solve_captcha reports the provider it cleared with.
headedoptionallocal only: show a real browser WINDOW (default) or run it invisibly. true = visible window you can watch; false = headless, no window. Ignored on the hosted fleet, where placement decides.
proxyoptionaluse THIS proxy for the session, in whatever format your provider gave you: scheme://user:pass@host:port, user:pass@host:port, host:port, or host:port:user:pass. A provider pool URL is also accepted and is expanded inside the browser.
proxy_provideroptionalpick an exit from your configured pool by provider, e.g. "nstproxy", "myprivateproxy"/"mpp", "2captcha", "oxylabs", "brightdata". Also accepts "busyip", which does NOT come from the pool: BusyIP has no proxy line to pick -- one gate, one base username, and the targeting (country, type, session) composed per launch from your account link, so pair it with proxy_country. A busyip launch REFUSES rather than falling through to direct egress if the account is not linked. Use godbrowser_proxy to see which providers you have.
proxy_countryoptionalpick an exit whose provider string states this ISO-2 country, e.g. "US". An exit that states NO country is excluded rather than assumed to match, so you never silently egress from elsewhere.
resource_modeoptionalLIGHTWEIGHT PAGE LOAD (opt-in, OFF by default). "lite" drops non-essential FIRST-PARTY subresources before they hit the network -- images, fonts, media, stylesheet, beacons, pings, prefetch, cross-origin iframes -- for a faster, lower-proxy-bandwidth load; the page renders as unstyled-but-functional HTML. Main-frame HTML, XHR/fetch, and scripts always load. ⛔ FINGERPRINT RISK: a real Chrome always fetches its own images/fonts/CSS -- a session that never does is a distinguishing tell some detectors watch for (missing tracking pixel, unresolved fonts, a CSSOM mismatch). Use only for scrape/automation work, never a session meant to look like an ordinary visit.
block_resourcesoptionalgranular override of resource_mode="lite" -- comma-separated tokens to block: images, fonts, media, stylesheet, beacons, pings, prefetch, iframes-3p. Same fingerprint risk as resource_mode.
direct_resourcesoptional⛔ EGRESS SPLIT -- an IP-EXPOSURE lever, not a bandwidth lever. Direct-dials CROSS-ORIGIN static assets OUTSIDE the proxy instead of blocking them. MEASURED live, control-vs-switch on the same page load (T-1599, 2026-09-05): the direct-dialled third-party host sees THIS MACHINE'S REAL PUBLIC IP at the same moment the page origin sees the proxy exit, with Referer/Sec-Fetch-Site tying the two together (page/XHR egress 107.166.119.174 = the exit; the direct asset 89.28.43.197 = the real host IP; socket peer the origin itself, no proxy in path). A CDN or shared static host present on BOTH legs therefore learns the real IP behind your exit DIRECTLY -- that is de-anonymisation, not a coherence tell. ⛔ AND IT BUYS ALMOST NOTHING: the browser-side gate (T-0802) direct-dials only requests that are credential-less AND cross-origin AND not a vendor host, which excludes essentially every real page asset (a plain <script src> carries credentials and stays on the proxy). Measured direct-routed share: python.org 1 request / 9 KB of 500 -- bbc.com/news 6 of 213 (~3%) -- ikea.com 0 of 526 requests, 0 bytes. Same token grammar as block_resources plus "script". Unset by default; leave it unset unless you have deliberately decided that a named third party may learn your real IP.
block_trackersoptionalSAFER lightweight-load lever: drop THIRD-PARTY ad/tracker requests only (what a real uBlock-Origin user does too), returned as an empty 200 stub so anti-adblock bait sees a normal-shaped response. OFF by default. Requires persona_class to actually take effect -- without it this silently does nothing (fail-closed by design in the browser).
screencastoptionalallow this session to be WATCHED live and RECORDED (default off). true = godbrowser_screencast can stream it to a local URL and save replayable recordings; the capability is granted here and cannot be added later. Capture is still OFF until you call godbrowser_screencast action:"start" -- this is permission, not the act. Works headless too: frames come from the renderer, so no window is needed.
persona_classoptionalrequired to make block_trackers actually block anything. "adblock-desktop": blocks like a real desktop uBlock Origin user (ERR_BLOCKED_BY_CLIENT) -- desktop OS only, a coherent everyday persona. "trusted-scrape": operator-asserted non-adversarial automation (empty-200 stub instead), any OS. Leaving this unset makes block_trackers a no-op on purpose.
godbrowser_linkBuild — or open — a gb:// link that launches GodBrowser already configured: a saved profile, a device, a locale, an egress country, a landing page. action:"build" returns the link to share or paste; action:"open" also dispatches it on this machine. It percent-encodes the values for you, which is the point: a landing URL carrying its own & would otherwise be cut short and the page would look like the site misbehaving. A link deliberately cannot carry a proxy credential (name a provider instead) or a non-http(s) landing page — the full contract is on the parameter reference.
10 parameters
actionoptional"build" (default) returns the link; "open" also launches it on this machine
profileoptionala saved session to restore — implies persist, and brings back its device, locale and egress country
osoptionalwindows | macos | linux | android | ios
browseroptionalchrome | safari | firefox | edge | brave …
localeoptionale.g. "en-GB" — drives navigator.languages AND Accept-Language
proxy_provideroptionalnstproxy | mpp | 2captcha | … — a NAME, never a credential
proxy_countryoptionalISO-2 egress country, e.g. "US"
urloptionalthe page to land on (http/https only). Encoded for you.
persistoptionalsave the session to your account (default on when signed in)
headedoptionaltrue = a visible window (default), false = no window
godbrowser_personasList the device personas GodBrowser can present — every supported OS and browser engine, and which combinations are coherent. Call it before a launch when you want a specific device rather than the seed-derived default: an incoherent pair is itself a fingerprinting tell, because no such device exists.
1 parameter
osoptionaloptional: show only the browsers coherent with this OS
godbrowser_proxiesCheck whether this account has proxies configured and how many usable exits the pool holds — a read-only status count. For the per-provider detail, the exit countries and the parser, use godbrowser_proxy.
4 parameters
dialoptionalACTUALLY DIAL an exit and report LIVE or DEAD instead of only parsing the stored lines (default false). Each probe opens a real connection through the pool AND FETCHES THE EXIT ADDRESS -- a CONNECT that answers is NOT proof of egress, so a proxy whose measured exit equals this machine's own address is reported REFUSED (egress-is-host-ip), never LIVE. Costs a few seconds and a little proxy bandwidth per provider. Use it before promising a run "through a proxy"; leave it off for a cheap "is anything configured?" read.
dial_provideroptionalwith dial:true, probe only this provider (e.g. "nstproxy", "busyip") instead of one exit per provider.
dial_countryoptionalwith dial:true, ISO-2 country to request for providers whose targeting is composed per session (BusyIP). ⚠️ Asking for a country whose exits sit on the SAME ISP as the calling machine can legitimately return that machine's own address, which this tool then refuses -- that is the instrument working, not the pool failing.
dial_timeout_msoptionalper-probe timeout in ms (default 15000, clamped 3000-60000).
godbrowser_proxyInspect and choose your egress. Shows whether a proxy is configured, which providers you have, the exit country of each, whether it is sticky or rotating and how often it rotates, and which lines are pool sources (expanded inside the browser) versus direct exits. It also parses any proxy string you paste, in any provider format, and tells you what it is. It never returns a password. Call it before godbrowser_launch to pick proxy_provider / proxy_country.
4 parameters
actionoptional"info" (default) = what is configured; "parse" = classify the string in `proxy`; "providers" = one row per provider
proxyoptionalfor action:"parse" — any proxy string: scheme://user:pass@host:port, user:pass@host:port, host:port, host:port:user:pass, or a provider pool URL
provideroptionalfilter to one provider, e.g. "nstproxy" / "mpp" / "2captcha"
countryoptionalfilter to exits stating this ISO-2 country, e.g. "US"
godbrowser_sessionManage saved logins — list (filter by name_contains, site_contains, updated_within_days; sort, limit), restore, save, or clear. A restore reproduces the whole identity, not just the cookies: the device it was banked on (OS/browser/persona), its locale, and — where recorded — the egress country it was created from (same exit, then any exit in that country, then an honest fallback to this machine, reported as egress_continuity). Do not pass os/browser to a restore unless you deliberately mean to override the banked device: doing so reintroduces exactly the device mismatch the restore exists to remove. The response reports persona_restored, persona_banked and egress_continuity so you can see what you actually got. action:"clear" empties a profile's session — the cookies, localStorage and IndexedDB — while keeping the profile itself: its name, the persona (OS / browser / locale) it was banked on and its recorded egress country are unchanged, so the same name relaunches as the same device with a clean cookie jar. It is destructive and cannot be undone, so it requires confirm:true — without it the call is a dry run that reports what would be removed, per store, and changes nothing. scope selects which store is emptied: local (the on-disk profile directory on this machine), banked (the session saved on your GodBrowser account), or both (default). Clearing only local does NOT retire the session: the next restore pulls the banked copy back. Each store reports its own status (cleared, already_clear, refused or not_requested) and the top-level cleared is true only if every requested store succeeded; a browser running on the profile is a refusal, never a kill. Local mode in v1.
14 parameters · 1 required
actionrequired"list" | "restore" | "save" | "clear". restore and clear need session_name (the profile shown by list).
scopeoptionalclear: which store to empty — "local" (the on-disk profile directory on this machine), "banked" (the session saved on your GodBrowser account), or "both" (default). ⛔ Clearing only "local" does NOT retire the session: the next restore pulls the banked copy back.
confirmoptionalclear: must be true. A clear destroys session state and cannot be undone, so it does nothing without an explicit confirm — the same convention as every other destructive verb here.
name_containsoptionallist filter: only sessions whose profile NAME contains this (case-insensitive)
site_containsoptionallist filter: only sessions with a recorded SITE/host containing this, e.g. "stripe" or "claude.ai"
updated_within_daysoptionallist filter: only sessions banked within the last N days (freshness)
sortoptionallist order: "recent" (default, newest first), "name", or "size"
limitoptionallist: max rows to return (default 50)
session_nameoptionalthe saved session/persona name (for restore/save)
osoptionalpersona OS for restore: windows | macos | linux
browseroptionalpersona browser for restore
seedoptionalpersona seed for restore (identifies which saved login)
account_keyoptionaloptional account key selecting which stored session to restore (server-side; never logged)
screencastoptionalrestore-and-watch: allow the restored session to be WATCHED live and RECORDED (default off). Same capability as godbrowser_launch { screencast: true } -- it can only be granted as the session is created, so it must be asked for HERE, not after the restore returns.
godbrowser_set_personaSwitch to a different device persona — relaunches a fresh, coherent instance and returns a new session_id.
5 parameters · 1 required
session_idrequiredthe current session_id (it will be closed)
osoptionalnew device OS: windows | macos | linux
browseroptionalnew browser: chrome | edge | firefox | safari
seedoptionalnew stable seed -> a new stable device identity
countryoptionalpreferred region/country for placement
Navigate
godbrowser_go_backGo back one history entry (the Back button) and wait for load. Returns whether it navigated + the URL before/after.
1 parameter · 1 required
session_idrequiredthe session_id from godbrowser_launch
godbrowser_go_forwardGo forward one history entry (the Forward button) and wait for load. Returns whether it navigated + the URL before/after.
1 parameter · 1 required
session_idrequiredthe session_id from godbrowser_launch
godbrowser_navigateNavigate the session to a URL and wait for load; returns the final (post-redirect) URL.
3 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
urlrequiredthe URL to open (http/https)
wait_untiloptionalload condition to wait for (advisory; the session waits for document-complete by default)
godbrowser_reloadReload the current page (the Refresh button) and wait for load; hard skips the cache. Returns the URL.
2 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
hardoptionalskip the cache (a hard reload)
godbrowser_scrollScroll by a pixel amount, to top/bottom, or a selector into view — reveal lazy-loaded content.
4 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
byoptionalscroll by this many pixels (positive = down)
tooptional"top" or "bottom"
selectoroptionalscroll the element matching this CSS selector into view
godbrowser_wait_forWait for a page condition before you read or click — locate by ANY of: CSS selector, visible text, role+name, label, placeholder, testid, or xpath. Choose a state: visible (default), present (in the DOM), hidden (was shown, now gone, e.g. a spinner), or absent (removed). Polls until it holds or times out; or pass ms alone for a fixed delay. Use on dynamic / SPA pages.
15 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
selectoroptionala CSS selector to wait for
textoptionalwait for an element by VISIBLE text, e.g. "Loading"
roleoptionalan ARIA role (pair with name); or, with text, scope the match to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text
placeholderoptionalan input placeholder
testidoptionala data-testid value
pierceoptionalalso search inside OPEN shadow roots (a CLOSED shadow root is unreachable from script by design)
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
stateoptionalthe condition: "visible" (default, appears+shown), "present" (in DOM), "hidden" (goes hidden), or "absent" (removed from DOM)
msoptionalinstead of a locator, wait this many milliseconds (a fixed sleep)
timeout_msoptionalmax time to wait for the condition (default ~10000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_wait_for_element_countWait until the matched-element count meets expected (default gte = at least N appeared) — e.g. results / rows rendered — clean ok:false on timeout (no throw). comparator: gte (default) / equals / lte / gt / lt. Full universal locator.
16 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
expectedrequiredthe element count to wait for
comparatoroptionalhow to compare the actual count to expected: "gte" (default), "equals", "lte", "gt", "lt"
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_wait_for_functionWait until a JS predicate you supply returns truthy, then return its value — the readiness wait for SPAs whose ready is a JS state flag / store / counter rather than a visible element (use godbrowser_wait_for for element state). Give an expression (e.g. window.__APP_READY__===true, document.querySelectorAll('.item').length>=10) or a function. Polls until truthy or timeout. Returns {ok:true, value, elapsed_ms} on success, {ok:false, timed_out:true, elapsed_ms} on timeout — a clean result, never an error; a predicate that throws is treated as not-yet-true and polling continues. The returned value is circular/size-capped. First-party / operator-only in v1 (runs caller JS — the godbrowser_eval trust posture).
5 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
expressionrequireda JS predicate — an expression (e.g. "window.__READY__===true") or a function (e.g. "() => document.querySelectorAll('.row').length>=5"); polled until it returns truthy
timeout_msoptionalmax ms to wait (default 30000, ceiling 120000)
poll_interval_msoptionalpoll interval in ms (default 150)
argsoptionaloptional arguments passed into the predicate when it is a function
godbrowser_wait_for_navigationWait for the top-frame URL to change (a navigation to commit) — or, with expected, to reach it — after a submit / link click. Clean ok:false on timeout, never an error (no throw). match (with expected): contains (default) / equals / prefix / regex.
5 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
expectedoptionaloptional target URL (or fragment, per match) to wait for; omit to wait for ANY navigation away from the current URL
matchoptionalmatch mode when expected is set: "contains" (default), "equals", "prefix", "regex"
timeout_msoptionalmax ms to wait for the navigation (default ~10000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_wait_for_urlWait for the top URL to match expected, polling until it does or timeout_ms — clean ok:false on timeout, never an error (no throw). match: contains (default) / equals / prefix / regex.
5 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
expectedrequiredthe URL (or fragment, per match) to wait for
matchoptionalmatch mode: "contains" (default), "equals", "prefix", "regex"
timeout_msoptionalmax ms to wait (default ~10000)
poll_msoptionalpoll interval while waiting (default ~150)
Tabs & frames
godbrowser_close_tabClose a tab (by target_id / index / url / title, or omit all to close the current tab). Closing the active tab resets the context to a remaining tab (the launch tab if still open) + the top frame.
6 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
target_idoptionalthe tab target_id to close (from list_tabs)
indexoptionalthe 0-based tab index to close
urloptionalclose the tab whose URL matches this (per match)
titleoptionalclose the tab whose title matches this (per match)
matchoptionalmatch mode for url/title: "icontains" (default, case-insensitive), "contains", "equals", "prefix", "regex"
godbrowser_enter_frameEnter a same-origin iframe so subsequent Drive verbs target elements inside it. Identify by CSS selector (the iframe), 0-based frame_index, or text (its name / src / id / title); omit all when the page has exactly one iframe. Call exit_frame (or navigate) to return to the top. A cross-origin frame returns a clean ok:false (frame_cross_origin) — same-origin frames only in v1.
5 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
selectoroptionala CSS selector matching the <iframe> element
frame_indexoptionalthe 0-based iframe index from list_frames
textoptionalmatch the frame by a substring of its name / src / id / title
xpathoptionalan XPath matching the <iframe> element
godbrowser_exit_frameLeave the current iframe and return the Drive context to the top frame (undoes enter_frame); a no-op if not in a frame.
1 parameter · 1 required
session_idrequiredthe session_id from godbrowser_launch
godbrowser_list_framesList the iframes on the current tab — each with index, name, id, src, same_origin, url. Cross-origin frames are listed (same_origin:false) but cannot be driven in v1.
1 parameter · 1 required
session_idrequiredthe session_id from godbrowser_launch
godbrowser_list_tabsList the open tabs (page targets) in the session — each with index, target_id, url, title, active. Find a tab a click opened in the background (a pop-up / target=_blank) before switching to it.
1 parameter · 1 required
session_idrequiredthe session_id from godbrowser_launch
godbrowser_switch_tabSet the active tab for subsequent Drive calls — every following navigate / click / type / read acts on it. Identify by target_id (from list_tabs), 0-based index, a url match, or a title match. Switching resets the frame context to the top frame; clean ok:false if none matched (no throw).
6 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
target_idoptionalthe tab target_id from list_tabs
indexoptionalthe 0-based tab index from list_tabs
urloptionalmatch the tab whose URL matches this (per match)
titleoptionalmatch the tab whose title matches this (per match)
matchoptionalmatch mode for url/title: "icontains" (default, case-insensitive), "contains", "equals", "prefix", "regex"
Interact
godbrowser_autocomplete_selectFill an autocomplete / typeahead and pick a suggestion — standard typeaheads AND custom Web Components (shadow-DOM / portal option lists that render detached from the input). Type the query, wait (generous, tunable via list_timeout_ms) for the list, then commit the matching option (option_text, defaults to the typed text) — trying a matching option element, a deep-pierced portal / shadow option row, then keyboard ArrowDown + Enter — fire input + change, verify the value committed, and retry up to retry times. option_selector / option_regex for the option elements (a >>> frame/shadow path is supported); verify_text to require the committed value contain a string. Locate the input with the universal locator.
23 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
option_textoptionalthe visible text of the suggestion to pick (defaults to the typed text)
option_selectoroptionaloptional CSS selector for the option elements, if not standard [role=option]/link/button (a ">>>" frame/shadow path is supported)
option_regexoptionaloptional case-insensitive regex to pick the option row by text when observing the rendered list
option_nthoptionalwhen several options match, pick this one (0-based)
verify_textoptionalrequire the committed field value to contain this text before reporting success
humanoptionaltype the query with realistic human keystroke timing
list_timeout_msoptionalmax ms to wait for the suggestion list to render (default ~6000)
retryoptionalbounded clear + re-type + re-open retries if the value does not commit (default 2, max 3)
arrow_stepsoptionalhow many ArrowDown presses before Enter in the keyboard fallback (default 1)
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_checkbox_setSet a checkbox to a desired state (checked / unchecked) — idempotent: a real, trusted click that fires change only when the current state differs (verify-and-retry). Native <input type=checkbox> + role=checkbox / aria-checked widgets. Returns whether it changed. Full universal locator.
15 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
stateoptionaldesired state: true = checked (default), false = unchecked
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_clearEmpty a field with real, trusted keys (focus, caret-to-end + delete) without typing anything new — for a search box or pre-filled input you want blank. Never JS-overwrites; use clear_and_type to overwrite in one step. Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_clear_and_typeReplace a field's entire contents — focus, select-all + delete with real trusted keys (End + Backspace, OS-independent), then type the new text (firing input) — for a pre-filled field you must overwrite. Never JS-overwrites the value; set human for a realistic cadence. Full universal locator.
17 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
humanoptionaltype with realistic human keystroke timing instead of one bulk insert
wpmoptionalapproximate typing speed in words per minute when human is set (default ~65)
jitteroptionaltiming-variance factor when human is set, 0..1 (default ~0.35)
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_clickClick an element via a real, trusted pointer — locate it by ANY of: CSS selector, visible text (getByText), role+name (getByRole), label, placeholder, testid, or xpath. With a non-selector locator it auto-waits for a visible match, then clicks (works on dynamic pages). Match modes: icontains (default) / contains / equals / iequals / starts_with / ends_with / regex. Returns the URL after the click. Deep-piercing locator (T-1023): reach across nested cross-origin iframes (OOPIFs) and open OR closed shadow roots in one flat selector via the >>> frame-descent combinator (e.g. iframe#a >>> iframe#b >>> button.target), or structured with frame_path[] + selector, or shadow-only with pierce:true — then land a trusted click through the innermost frame. First-party / operator-only.
19 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
selectoroptionala CSS selector for the element. Deep-piercing: use " >>> " between iframe steps to descend into nested cross-origin iframes and open/closed shadow roots in one call, e.g. "iframe#outer >>> iframe#inner >>> button[aria-label='Start']" — the trusted click is hit-tested into the innermost frame
pierceoptionalpierce open AND closed shadow roots when resolving the selector in the current frame (no frame descent) — reaches an element inside a mode:"closed" shadow root that a normal selector cannot
frame_pathoptionalstructured deep descent: an ordered list of iframe CSS selectors to cross (equivalent to the inline " >>> " form) before matching the terminal selector; descends nested cross-origin OOPIFs
textoptionalclick by VISIBLE text, e.g. "Accept cookies"
roleoptionalan ARIA role, e.g. "button" / "link" / "textbox"; pair with name for getByRole. (With text, scopes the text match to "button"/"link"/"any".)
nameoptionalthe accessible name to match when role is set, e.g. "Submit"
labeloptionalthe label text of a labelled control, e.g. "Email address"
placeholderoptionalan input placeholder, e.g. "Search"
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", or "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
wait_foroptionalactionability before clicking: "visible" (default) or "clickable" (also not covered by an overlay)
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
expect_nameoptionalthe LABEL you saw on this element in godbrowser_read_page. Pass it whenever you click by ref: refs of elements without an id are POSITIONAL, so any re-render (typing into a form re-renders it) can move a different element under the same ref, and the click then lands on that one and reports success. With expect_name the click is refused instead, telling you what is actually there now.
allow_destructiveoptionalpermit clicking a control whose label says it deletes, removes, deactivates, terminates, revokes or unsubscribes. Refused by default — a ref that has become a delete control is usually a ref that moved, and the mistake is not undoable.
modifiersoptionalmodifier keys held during the click: "shift", "ctrl", "alt", "meta" (or "cmd"/"option"/"control"), a list like ["shift","meta"], or a combined string "ctrl+shift". Use shift to extend a range selection in a table or list, ctrl/meta to toggle one item or open a link in a new tab.
godbrowser_click_if_presentClick an element only if it appears within a short wait; otherwise return cleanly — a graceful no-op, not an error — for optional / intermittent controls (a survey prompt, a maybe-later, an interstitial). Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_dismiss_cookie_bannerDismiss a cookie-consent / GDPR banner so it stops covering the page — clicks its Accept all (default) or reject control. Tries common consent frameworks (OneTrust / Cookiebot / Didomi / Osano / Quantcast / Usercentrics) then a conservative accept-button match scoped to a consent container (never opens a preferences dialog); scans the main document + same-origin iframes. Call it once right after navigating, before you read or click. A page with no banner is a normal no-op, not an error.
4 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
rejectoptionalclick the REJECT / decline control instead of accept (default: accept all)
selectorsoptionalextra CSS selectors for the accept/reject button to try FIRST (for a site the built-in list misses)
timeout_msoptionalmax ms to auto-wait for a late-rendered banner (default ~3000; 0 = check once and return)
godbrowser_double_clickDouble-click an element via a real, trusted pointer (two quick clicks) — open an item, select a word, fire a dblclick handler. Full universal locator + auto-wait. Supports the deep-piercing locator (T-1023): the >>> frame-descent combinator (or frame_path[] + selector, or shadow-only pierce:true) reaches across nested cross-origin iframes (OOPIFs) and open OR closed shadow roots in one flat selector — first-party / operator-only.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_dropdown_pick_optionPick an option from a custom (non-native) dropdown / combobox — a div / listbox widget or a shadow-DOM / portal Web Component; use godbrowser_select for a native <select> — trusted-click the trigger to open, wait for the option list, commit the matching option (option_text) via a matching element or a deep-pierced portal / shadow row, fire change, then verify the trigger shows the choice (or the list closed) and retry up to retry times. option_selector supports a >>> frame/shadow path. Locate the trigger with the universal locator.
21 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
option_textoptionalthe visible text of the option to pick
option_selectoroptionaloptional CSS selector for the option elements (a ">>>" frame/shadow path is supported)
option_regexoptionaloptional case-insensitive regex to pick the option row by text when observing the rendered list
option_nthoptionalwhen several options match, pick this one (0-based)
list_timeout_msoptionalmax ms to wait for the option list to render (default ~6000)
retryoptionalbounded re-open + re-select retries if the choice does not commit (default 2, max 3)
arrow_stepsoptionalopt into a keyboard ArrowDown+Enter fallback with this many ArrowDown presses
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_fillAlias of type — fill a field with real key input, located by ANY of: CSS selector, role+name, label, placeholder, testid, or xpath. Set human for a realistic per-key typing cadence instead of one bulk insert; optional submit to press Enter. Deep-piercing locator (T-1023): target a field across nested cross-origin iframes (OOPIFs) and open OR closed shadow roots in one flat selector via the >>> frame-descent combinator (or frame_path[] + selector, or shadow-only pierce:true) — trusted-focusing the field (typing works for shadow-pierce + same-process frames; char delivery into a cross-process OOPIF is a v1 follow-up). First-party / operator-only.
17 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
selectoroptionala CSS selector for the input/textarea (or a locator below). Deep-piercing: use " >>> " between iframe steps to reach a field inside nested cross-origin iframes and open/closed shadow roots
pierceoptionalpierce open AND closed shadow roots when resolving the selector in the current frame (no frame descent)
frame_pathoptionalstructured deep descent: an ordered list of iframe CSS selectors to cross before matching the field selector (equivalent to the inline " >>> " form)
textrequiredthe text to enter
roleoptionalan ARIA role for the field (pair with name)
nameoptionalthe accessible name when role is set
labeloptionalthe field's label text, e.g. "Email address"
placeholderoptionalthe field's placeholder
testidoptionala data-testid value
xpathoptionalan XPath expression
matchoptionallocator match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
humanoptionaltype with realistic human keystroke timing (per-key dwell + variable inter-key delays) instead of one bulk insert
wpmoptionalapproximate typing speed in words per minute when human is set (default ~65)
jitteroptionaltiming-variance factor when human is set, 0..1 (default ~0.35)
clearoptionalempty the field before filling (trusted keys). Typing APPENDS to whatever is already there, so a pre-filled field silently produces a merged value.
submitoptionalpress Enter after filling
godbrowser_focusMove keyboard focus to a field or control — idempotent (a no-op if it is already focused). Full universal locator + auto-wait.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_force_clickClick an element at its position even when a normal click reports it covered — a control under a decorative / transparent overlay, a sticky header, or a conservative not-clickable check. Prefer godbrowser_click first; use this when it reports the target covered. Full universal locator. Supports the deep-piercing locator (T-1023): the >>> frame-descent combinator (or frame_path[] + selector, or shadow-only pierce:true) reaches across nested cross-origin iframes (OOPIFs) and open OR closed shadow roots in one flat selector — first-party / operator-only.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_hoverHover the pointer over an element (a real, trusted mouse move that fires mouseover / mouseenter) and dwell without clicking — reveal a hover-gated menu, tooltip, or control. Full universal locator + auto-wait. Supports the deep-piercing locator (T-1023): the >>> frame-descent combinator (or frame_path[] + selector, or shadow-only pierce:true) reaches across nested cross-origin iframes (OOPIFs) and open OR closed shadow roots in one flat selector — first-party / operator-only.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_pick_datePick a date in a calendar / date-picker — standard pickers AND custom Web Components (shadow-DOM / portal calendars) whose field is read-only. Trusted-click to open, then: by DEFAULT click any enabled day in the month shown (any valid date will do — zero navigation); or, with a specific date (YYYY-MM-DD / DD/MM/YYYY), header-jump (Month YYYY header → year grid → month → day). Never steps month-by-month and never writes the value directly into a read-only field. Verifies the field then holds a value; any_enabled forces the default strategy. Locate the input with the universal locator.
17 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
dateoptionala specific date to pick, "YYYY-MM-DD" or "DD/MM/YYYY" (omit to accept any selectable day in the shown month)
any_enabledoptionalforce the any-selectable-day strategy (default: true when no date is given, false when a specific date is given)
open_timeout_msoptionalmax ms to wait for the calendar to open (default ~3500)
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_pressPress a single key in the session (Enter, Tab, Escape, ArrowDown…).
2 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
keyrequiredthe key name, e.g. "Enter", "Tab", "Escape", "ArrowDown"
godbrowser_press_enter_to_submitFocus a field and press Enter with a real, trusted key that carries the carriage return, so a form's implicit submit fires — the type-into-the-box-and-hit-Enter flow. Returns the URL after. Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_radio_chooseSelect a radio in a group — by locator, by value (optionally with the group name), or by label / text. A trusted click that fires change; a no-op if it is already selected. Returns whether it changed. Full universal locator.
15 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
valueoptionalchoose the radio in the group by its value attribute (optionally with name)
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_right_clickRight-click (context-click) an element via a real, trusted pointer to open its context menu / fire contextmenu. Full universal locator + auto-wait. Supports the deep-piercing locator (T-1023): the >>> frame-descent combinator (or frame_path[] + selector, or shadow-only pierce:true) reaches across nested cross-origin iframes (OOPIFs) and open OR closed shadow roots in one flat selector — first-party / operator-only.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_selectChoose an option in a <select> dropdown — by the option's visible text (option_text, e.g. United States, when the value like US is opaque) OR by its exact value. Pass a selector for a specific dropdown, or omit it to use the first / only select. option_text supports match modes (icontains/contains/equals) + nth, and auto-waits for a late-rendered select.
7 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
selectoroptionala CSS selector for the <select> (omit to use the first / only select on the page)
valueoptionalchoose the option by its exact value (use this OR option_text)
option_textoptionalchoose the option by its VISIBLE label text, e.g. "United States"
matchoptionaltext match mode for option_text: "icontains" (default), "contains", or "equals"
nthoptionalwhen several options match the text, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a late-rendered select / option (default ~10000)
godbrowser_toggle_switch_setSet an on/off toggle switch to a desired state — idempotent (clicks only when it differs; role=switch / aria-checked aware; verify-and-retry). Returns whether it changed. Full universal locator.
15 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
stateoptionaldesired state: true = on (default), false = off
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_typeType text into a field with real trusted key input — locate it by ANY of: CSS selector, role+name, label, placeholder, testid, or xpath (auto-waits). Set human for a realistic per-key typing cadence (key-hold dwell + variable inter-key delays + word-boundary pauses) instead of one bulk insert — tune with wpm (~65) + jitter (0..1, ~0.35). Optional per_char + submit to press Enter. Deep-piercing locator (T-1023): target a field across nested cross-origin iframes (OOPIFs) and open OR closed shadow roots in one flat selector via the >>> frame-descent combinator (or frame_path[] + selector, or shadow-only pierce:true) — trusted-focusing the field (typing works for shadow-pierce + same-process frames; char delivery into a cross-process OOPIF is a v1 follow-up). First-party / operator-only.
19 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
selectoroptionala CSS selector for the input/textarea (or use a locator below). Deep-piercing: use " >>> " between iframe steps to reach a field inside nested cross-origin iframes and open/closed shadow roots
pierceoptionalpierce open AND closed shadow roots when resolving the selector in the current frame (no frame descent)
frame_pathoptionalstructured deep descent: an ordered list of iframe CSS selectors to cross before matching the field selector (equivalent to the inline " >>> " form)
textrequiredthe text to enter
roleoptionalan ARIA role for the field (pair with name), e.g. "textbox"
nameoptionalthe accessible name when role is set
labeloptionalthe field's label text, e.g. "Email address"
placeholderoptionalthe field's placeholder, e.g. "Search"
nthoptionalwhen several fields match, pick this one (0-based); omit to require a single match
testidoptionala data-testid value
xpathoptionalan XPath expression
matchoptionallocator match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
humanoptionaltype with realistic human keystroke timing (per-key dwell + variable inter-key delays + word-boundary pauses) — a natural cadence — instead of one bulk insert
wpmoptionalapproximate typing speed in words per minute when human is set (default ~65)
jitteroptionaltiming-variance factor when human is set, 0..1 (default ~0.35)
per_charoptionalemit fixed-interval per-character key events (a simpler alternative to human; default: a single trusted insert)
clearoptionalempty the field before typing (trusted keys, fires input). Use it whenever a field may already hold something — a pre-filled country prefix, a remembered value, or your own earlier attempt — because typing APPENDS and the result looks correct in every log.
submitoptionalpress Enter after typing
godbrowser_upload_fileUpload a local file into a file-input (session_id + paths[]) — avatar / photo changes, KYC / document uploads, listing images, any Choose file control. The only way to do it: the browser blocks scripted value-set on a file input, so the node sets it natively and fires change. Target the field with selector_or_hint — a CSS selector, its label, or the drop-zone / upload container (pierces shadow DOM + same-origin iframes), or a short hint (field name / nearby label text) — or omit it when the page has one file input; paths[] takes one or many files (must exist on the node running the session). First-party / operator-only in v1.
3 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
pathsrequirednode-local absolute path(s) of the file(s) to upload; one path, or several for a "multiple" file input
selector_or_hintoptionalhow to find the file field: a CSS selector (the <input type=file>, its <label>, or the drop-zone/upload container), or a short hint (field name / nearby label text). Omit to use the only file input on the page.
Read & extract
godbrowser_assert_attributeAssert an element's named attribute matches expected, auto-waiting — clean ok:false (no throw). match default equals. Full universal locator.
15 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
nameoptionalthe accessible name to match when role is set
expectedrequiredthe value the attribute should have (per match)
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_element_absentCheck an element is gone from the DOM (a spinner, modal, or toast disappearing), auto-waiting for it to leave — clean ok:false if still present (no throw). Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_element_checkedAssert a checkbox / radio / switch is checked, auto-waiting; checked:false asserts UNCHECKED — clean ok:false (no throw). Full universal locator.
15 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
checkedoptionaldesired state: true = checked (default), false = assert unchecked
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_element_countCheck the matched-element count meets expected, auto-waiting — clean ok:false if it never matches (no throw). comparator: equals (default) / gte / lte / gt / lt. Full universal locator.
16 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
expectedrequiredthe element count to check for
comparatoroptionalhow to compare the actual count to expected: "equals" (default), "gte", "lte", "gt", "lt"
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_element_enabledAssert an element is enabled, auto-waiting; enabled:false asserts DISABLED — clean ok:false (no throw). Full universal locator.
15 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
enabledoptionaldesired state: true = enabled (default), false = assert disabled
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_element_existsCheck an element exists in the DOM (visible or not), auto-waiting — clean ok:false if it never appears (no throw). Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_element_textCheck an element's visible text matches expected, auto-waiting — clean ok:false with the observed text on mismatch (no throw). match: icontains (default) / contains / equals / iequals / starts_with / ends_with / regex. Full universal locator.
16 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
expectedrequiredthe text the element should have
expected_matchoptionalhow to compare against `expected`: icontains (default) | contains | equals | iequals | starts_with | ends_with | regex. Separate from the locator's `match`.
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_element_valueCheck a form field's current value (input / textarea / select) matches expected, auto-waiting to confirm a field was filled — clean ok:false on mismatch (no throw). Full universal locator.
15 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
expectedrequiredthe value the field should hold
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_element_visibleCheck an element is present and visible, auto-waiting up to timeout_ms — a failed assert returns a clean ok:false, never an error (branch on ok). Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_page_contains_textCheck the page's visible text contains a string (confirm the right page or a success banner), auto-waiting — scans the main document + open shadow roots + same-origin iframes; clean ok:false (no throw). match: icontains (default) / contains / equals / regex.
5 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
textrequiredthe text expected to be visible on the page
matchoptionalmatch mode: "icontains" (default), "contains", "equals", "regex"
timeout_msoptionalmax ms to auto-wait for the text to appear (default ~10000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_titleAssert document.title matches expected, polling post-nav — clean ok:false (no throw). match: icontains (default) / contains / equals / iequals / starts_with / ends_with / regex.
5 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
expectedrequiredthe title (or fragment, per match) the page should have
matchoptionalmatch mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
timeout_msoptionalmax ms to auto-wait for the title to match (default ~10000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_assert_urlCheck the top URL matches expected, polling after a navigation settles — clean ok:false with the observed URL (no throw). match: equals (default) / contains / prefix / regex.
5 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
expectedrequiredthe URL (or URL fragment, per match) the page should be at
matchoptionalmatch mode: "equals" (default), "contains", "prefix", "regex"
timeout_msoptionalmax ms to auto-wait for the URL to match (default ~10000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_capture_networkInspect the HTTP requests + responses your live session made (url, method, status, headers, body, content_type, timing) to find the API/data endpoint behind a page and build a faster direct request. Filter by host, path_contains, method, or resource_type (xhr / fetch / document). Drive the session first, then call this to read the captured XHR / fetch / GraphQL traffic. Read-only, by value + size-capped; infrastructure credentials never included.
6 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
hostoptionalonly requests whose host contains this string, e.g. "999.md" or "api."
path_containsoptionalonly requests whose path+query contains this string, e.g. "graphql" or "/search"
methodoptionalonly this HTTP method, e.g. "POST"
resource_typeoptionalonly this resource type: xhr | fetch | document (the data-bearing requests)
limitoptionalmax entries to return (most recent; default ~100)
godbrowser_count_elementsCount elements matching a locator (0 = none; never throws) — list length, results-appeared, or rows rendered. Returns count + visible. Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_extractExtract structured data by CSS selector (first match or all), returned by value, size-capped.
5 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
selectoroptionala CSS selector for the element(s) to extract (the fast, exact path — required unless you pass schema)
alloptionaltrue = extract every match (an array); false = the first match
fieldsoptionaloptional {name: sub-selector} map to pull named fields per matched element (CSS path)
schemaoptionaldescribe the fields you want in plain language (e.g. "title, price, year" or "{title, price, year}"); when set, the fields are parsed from the page content into structured JSON — no CSS selector needed
godbrowser_findFind an element by a natural-language description (e.g. the search box, the Sign up button, the email field) and get back a stable ref you pass straight to click / type / fill / select as their selector — no CSS knowledge needed, just describe the element. Returns found / ref / role / name; robust to markup changes.
2 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
descriptionrequireda natural-language description of the element, e.g. "the email field" or "the Accept cookies button"
godbrowser_get_attributeRead a named attribute (href, value, aria-checked, data-*), auto-waiting for a visible match — value is null if the attribute is absent, found:false if no element matches (no throw). Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
nameoptionalthe accessible name to match when role is set
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_get_current_urlRead the current page's top URL. Returns the URL.
1 parameter · 1 required
session_idrequiredthe session_id from godbrowser_launch
godbrowser_get_element_textRead an element's trimmed visible text (innerText), auto-waiting — found:false if no match (no throw). Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_get_htmlRead an element's HTML markup (outerHTML default, innerHTML with inner), auto-waiting; size-capped — found:false if no match (no throw). Full universal locator.
15 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
inneroptionalreturn innerHTML instead of the default outerHTML
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_get_input_valueRead a form field's current value (input / textarea / select), auto-waiting — found:false if no match (no throw). Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_get_page_titleRead the current page's title (document.title). Returns the title.
1 parameter · 1 required
session_idrequiredthe session_id from godbrowser_launch
godbrowser_inspect_windowHarvest the site-injected JavaScript globals a page stashes on window and return them as ranked JSON — often a faster, requests-less path than DOM scraping. Diffs the page's window globals against a clean same-origin baseline to surface only site-injected state — __NEXT_DATA__ (Next.js), __NUXT__ (Nuxt), __APOLLO_STATE__ (Apollo), __INITIAL_STATE__/__PRELOADED_STATE__ (Redux SSR), dataLayer (GTM), Shopify, wpApiSettings (WordPress), custom app state — classifies each and returns per global {name,type,constructor,keys?,length?,bytes,preview} ranked by usefulness (notable[] = the most useful). Getter- + circular-safe, depth/size-capped. A fixed, safe reader — content by value, never runs code you supply (like read_page).
5 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
include_previewoptionalinclude a depth+size-capped value preview per global (default true)
max_bytesoptionalper-global preview byte budget (default ~50KB, clamped to 128KB)
name_filteroptionala JS regex to keep only globals whose name matches, e.g. "^__" or "STATE|DATA"
include_functionsoptionalinclude function-valued globals (noted+skipped by default)
godbrowser_is_checkedRead whether a checkbox / radio / switch is checked (native input + role=checkbox / radio / switch + aria-checked), auto-waiting — found:false if no match (no throw). Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_is_enabledRead whether an element is enabled (not disabled / [disabled] / aria-disabled), auto-waiting — found:false if no match (no throw). Full universal locator.
14 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
pierceoptionalalso search inside OPEN shadow roots for this locator (a CLOSED shadow root is unreachable from script by design, and is reported as not-found rather than guessed at)
selectoroptionala CSS selector for the element
textoptionallocate by VISIBLE text (like getByText), e.g. "Subscribe"
roleoptionalan ARIA role (like getByRole), pair with name; with text, scopes it to "button"/"link"/"any"
nameoptionalthe accessible name to match when role is set
labeloptionala labelled control by its label text, e.g. "Email address"
placeholderoptionalan input placeholder
testidoptionala data-testid / data-test-id value
xpathoptionalan XPath expression
matchoptionaltext/name match mode: "icontains" (default), "contains", "equals", "iequals", "starts_with", "ends_with", "regex"
nthoptionalwhen several elements match, pick this one (0-based); omit to require a single match
timeout_msoptionalmax ms to auto-wait for a match to appear (default ~8000)
poll_msoptionalpoll interval while waiting (default ~150)
godbrowser_protectionsReport the privacy and anti-fingerprint protections GodBrowser detects as active on the current page (the detected vendors, the shield count, and the protection categories present) so you can verify which engaged. A read-only summary returned by value; runs no page logic you supply. First-party / operator-only in v1.
1 parameter · 1 required
session_idrequiredthe session_id from godbrowser_launch
godbrowser_read_pageRead the page as a structured outline — the accessibility tree, visible text, forms and links. Your primary way to see the page.
3 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
modeoptional"actions" (RECOMMENDED for driving a page: only what you can act on — every clickable/typable element with its ref, the form fields with type/required/options, and a short text excerpt), "a11y" (role/name tree), "text" (visible text), or "both" (default, the fullest and most expensive)
max_charsoptionalcap on returned text length (default ~20000)
godbrowser_scrape_templatesDrop-in scraping for common site shapes — no schema to author. action:"list" returns a curated catalog of scrape templates (product-listing, job-board, classifieds, forum, article, search-results), each a plain-language field spec; action:"apply" with a template_id + url opens the URL under a coherent persona and returns the extracted structured rows inline (rides the AI-native extractor, the same DATA-not-code path as extract schema-mode).
7 parameters · 1 required
actionrequired"list" to get the template catalog, or "apply" to run a template against a URL
template_idoptionalfor apply: which template to run, e.g. "product-listing" (an id from action:"list")
urloptionalfor apply: the page URL to scrape (http/https)
osoptionalpersona OS for apply: windows | macos | linux
browseroptionalpersona browser for apply: chrome | edge | firefox | safari
seedoptionala stable seed string -> a stable device identity for apply
countoptionalreserved: how many shards to fan this template across the fleet (the path-b `template-scrape` builtin, live on the next node roll); the current DRIVE path runs a single session
godbrowser_screenshotCapture a PNG of the page — viewport, full page, or a single element — as an image you can view.
3 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
full_pageoptionalcapture the full scrollable page (default: the current viewport)
selectoroptionalcapture only the element matching this CSS selector
Recipes
godbrowser_save_recipeWhile driving, save the exact steps you just performed as a reusable recipe. A recipe is data, not code — an ordered list of recorded steps (navigate/click/type/select/press/scroll/wait/extract/screenshot) with their recorded arguments. Page-script evaluation steps are never recorded, and a recipe containing one is rejected before replay.
4 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch (its recorded actions become the recipe)
namerequireda name for the saved recipe
recipe_idoptionalappend a new version to this existing recipe instead of creating a new one
literal_stepsoptionalstep indices (from godbrowser_record) whose value should be stored VERBATIM instead of generalised to a placeholder — for a value that really is meant to repeat, like a search term that happened to look like a username. A password/OTP value was never read and cannot be made literal; asking is refused and reported, never silently ignored.
Flows & advanced
godbrowser_evalRun first-party JavaScript in your own live session and return its value. First-party / operator-only.
2 parameters · 2 required
session_idrequiredthe session_id from godbrowser_launch
expressionrequireda JavaScript expression to evaluate in the page; its value (or an awaited promise) is returned by value
godbrowser_loginSign a banked account into its site, optionally persisting the session. First-party / operator-only.
3 parameters · 1 required
account_refrequiredthe banked account reference to log in (from godbrowser_register)
home_urloptionalthe signed-in landing page to confirm on (defaults to the account's site home)
headedoptionalrun with a visible window if the site needs on-page interaction (default headless)
godbrowser_registerCreate + bank a new account on a target site under a coherent persona. First-party / operator-only.
9 parameters · 1 required
targetrequiredthe site to register on (a domain or sign-up URL)
emailoptionaluse THIS inbox for the account (must be one of your own inboxes — see godbrowser_inbox). Omit to let one be picked and soft-locked for you.
persona_classoptional"desktop" (default) or "android"
headedoptionalshow the browser window (default true when running locally, so you can watch the sign-up happen)
persistoptionalbank the resulting logged-in session so the account can be restored later (default on)
fast_typingoptionalTESTING ONLY: fill each field instantly in one bulk set instead of typing it key by key. Much faster, but a value that arrives with no inter-key timing is an obvious automation tell — never use it for a run whose realism matters.
resumeoptionalcontinue an account that was already started on this site instead of creating a new one. Its banked session is restored under the same persona, so the browser picks up where it left off (often at "verify your email"). Passing an `email` implies this when that account already exists.
typing_wpmoptionalhow fast fields are typed, in words per minute (default 110 — a fast human; 65 is average, 40 the floor, 160 the ceiling). Faster is quicker but less human-looking, since the per-key cadence is part of the fingerprint.
identity_hintsoptionaloptional hints for the generated identity (advisory)
godbrowser_solve_captchaReport the outcome of the session's built-in captcha-service integration for the current page — armed SERVER-SIDE on every fleet session (no enable step, no provider key on this API): a detected challenge is routed to the configured provider automatically, and this reports the OUTCOME only (cleared? provider? kind? elapsed) — never a token or key. Optionally waits a few seconds for the outcome to settle.
3 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
wait_msoptionalpoll up to this many ms for the outcome to settle (max ~120000)
typeoptionaloptional hint of the challenge kind (advisory)
Run at scalefire-and-forget jobs across your node fleet
godbrowser_cancelCancel a running job — queued shards stop instantly; an in-flight shard finishes its current task then stops.
1 parameter · 1 required
job_idrequiredthe job_id returned by godbrowser_submit
godbrowser_delete_recipeDelete one or more of your saved recipes by id. Scoped to your own account; returns how many were removed.
1 parameter · 1 required
recipe_idsrequiredthe recipe ids to delete (from godbrowser_list_recipes)
godbrowser_list_recipesList your saved recipes — id, name, current version, status and creation time. Read-only and scoped to your own account.
godbrowser_nodesList your node fleet — each node's OS, status, capabilities and hardware class.
godbrowser_resultsFetch a job's scraped rows, paginated + tenant-scoped — page through them as they land.
3 parameters · 1 required
job_idrequiredthe job_id returned by godbrowser_submit
limitoptionalrows per page (default 200, max 1000)
offsetoptionalcursor offset for the next page (0-based)
godbrowser_run_recipeReplay a saved recipe deterministically across your fleet — the recorded steps exactly, under a coherent per-seed persona, with no AI. Returns a job_id you poll like a submit.
12 parameters · 1 required
recipe_idrequiredthe saved recipe id to replay (from godbrowser_list_recipes / godbrowser_save_recipe)
osoptionalpersona OS -- windows | mac | linux | android | ios. (Aliases the parser also accepts: win, macos, osx, iphone, ipad.) An UNRECOGNISED token is logged and IGNORED, leaving a seed-derived OS, so spell it exactly.
browseroptionalpersona browser -- chrome | chromium | edge | firefox | safari | brave | opera | vivaldi | samsung | yandex | duckduckgo. ⛔ PAIR IT COHERENTLY WITH os: safari exists only on mac/ios, samsung only on android, edge not on android. Call godbrowser_personas for the coherent combinations and why.
localeoptionalpersona locale, e.g. "en-US", "de-DE" -- sets --bot-config-locale so language headers, Intl and the UA agree
seedoptionala stable seed string -> a stable device identity
countoptionalhow many replay shards to fan across the fleet from this one call (default 1, max 50); each shard runs a distinct coherent per-seed device (T-0904 native fan-out)
nameoptionala label for this job
identityoptional"fresh" (default) picks a NEW inbox + password for each run, so replaying a sign-up creates a NEW account rather than re-typing the recorded one; "reuse" replays literally against an account you name (for a LOGIN recipe, where a second account would be the bug); "none" runs a recipe that needs no identity at all.
accountoptionalwith identity:"reuse", the account email whose stored credentials this run replays
session_idoptionallocal only: replay into an ALREADY-OPEN session instead of launching one (useful to watch it happen in a window you can see)
headedoptionallocal only: show the browser window while replaying (default true)
dry_runoptionalresolve the recipe and report the exact step list that WOULD run, without driving anything
godbrowser_statusPoll a job — overall state + per-task status/attempts + a result-row count.
1 parameter · 1 required
job_idrequiredthe job_id returned by godbrowser_submit
godbrowser_submitRun a workflow across your cross-OS node fleet under a matching-OS persona; returns a job_id to poll. Pick WHAT runs two ways: a built-in workflow via code_ref (call godbrowser_workflows for the list), OR your OWN target — pass url + a fields CSS-selector map ({name:'css-selector'}; a value may also be {selector,attr,all}, and a 'name[]' key collects an array) plus optional item_selector (the repeating list/table container ⇒ one row per match) to run the vetted custom-scrape builtin (deterministic CSS extract, no code upload) — so you can scrape any page at scale, not just the demo code_refs. Pass count (1..50, default 1) to fan N shards from this ONE submit — each shard a distinct coherent per-seed device (shard 0 = your seed, shard i = ${seed}#${i}, reproducible) placed across matching-OS nodes under a single job_id.
10 parameters
nameoptionala label for this job
code_refoptionalbuilt-in workflow: flagship-scrape-quotes | books-catalog | books-detail (default flagship-scrape-quotes). Omit and pass url+fields to run YOUR OWN target (custom-scrape).
urloptionalrun YOUR OWN target: the page URL to scrape. Provide with `fields` to run the custom-scrape builtin across the fleet (no code upload).
fieldsoptionalthe extraction schema for a custom url: a { name: "css-selector" } map (a value may also be { selector, attr, all } — attr: "text"|"href"|"src"|"html"|"value"; all:true / a "name[]" key collects an array). Deterministic CSS, no AI.
item_selectoroptionaloptional, for a custom url: a CSS selector for the repeating container (list/table row). Present -> one result row per matched container; absent -> a single page-level row.
osoptionalpersona OS -- windows | mac | linux | android | ios. (Aliases the parser also accepts: win, macos, osx, iphone, ipad.) An UNRECOGNISED token is logged and IGNORED, leaving a seed-derived OS, so spell it exactly.
browseroptionalpersona browser -- chrome | chromium | edge | firefox | safari | brave | opera | vivaldi | samsung | yandex | duckduckgo. ⛔ PAIR IT COHERENTLY WITH os: safari exists only on mac/ios, samsung only on android, edge not on android. Call godbrowser_personas for the coherent combinations and why.
localeoptionalpersona locale, e.g. "en-US", "de-DE" -- sets --bot-config-locale so language headers, Intl and the UA agree
seedoptionala stable seed string → a stable device identity
countoptionalhow many shards to FAN across the fleet from this one submit (default 1, max 50). Each shard runs a DISTINCT coherent per-seed device: shard 0 = your seed, shard i = a deterministic per-shard seed — one job_id fans N nodes.
Other
godbrowser_account_saveRecord an account you just created so you can log into it later: the site, the email, the password, and the persona seed its session was banked under.
7 parameters · 2 required
domainrequiredthe site the account is on, e.g. "theoldreader.com"
emailrequiredthe account email (normally one of your inboxes)
passwordoptionalthe password used. Omit when you are only updating an existing account (a status change, say) — a blank password is never written over a stored one. Never echoed back by any read path.
usernameoptionalthe username, if the site uses one
persona_seedoptionalthe seed the browser session was banked under (from godbrowser_launch) — this is what lets the session be restored later
statusoptional"registered" (default), "verify_pending" if it still needs an emailed/SMS code, or "logged_in"
verification_typeoptionalhow the site verified it: none | email_link | email_otp | phone_otp | unknown (default)
godbrowser_click_indicatorShow where this browser's clicks are landing: a small circle appears at each click and fades, so you can watch a run and see the landing point instead of inferring it from how the page reacted.
2 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch or godbrowser_register
enabledoptionaltrue = mark every click from now on; false = stop marking. Omit to read the current state without changing it.
godbrowser_dismiss_dialogClose a welcome / onboarding / tour dialog that is covering the page — the kind a site shows right after sign-up.
2 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
dry_runoptionalreport what it WOULD click without clicking
godbrowser_fill_credentialsType a saved account's email and password into a login form WITHOUT the password ever passing through you.
6 parameters · 3 required
session_idrequiredthe session_id from godbrowser_launch or godbrowser_login
accountrequiredthe account to log in as — its email address, as saved with godbrowser_account_save
password_refrequiredthe password field, as its ref/selector from godbrowser_read_page
email_refoptionalthe email/username field, if the form has one on this page
domainoptionalthe site this login is for, e.g. "theoldreader.com" — needed only when the same email has accounts on several sites; otherwise taken from the page you are on
submitoptionalpress Enter after the password (many login forms submit this way); default false — click the button yourself
godbrowser_inboxInspect your email inboxes — the mailboxes the register flow catches OTP / verification mail in.
13 parameters
actionoptional"status" (default) = your inboxes + liveness summary; "verify" = re-probe them live against EmailEngine and write the result back; "pick" = choose the best inbox to receive the next verification mail; "code" = wait for and read the verification CODE (or confirm LINK) that a site just emailed to one of your inboxes
emailoptionalnarrow to one inbox address. REQUIRED for action:"code" — the inbox the site was told to mail.
provideroptionalnarrow to one provider, e.g. "gmx.com"
usable_onlyoptionalonly inboxes that are active and not locked by a recent register run
limitoptionalmax inboxes to return (status, default 50) or to probe (verify, default 25, max 200)
freshoptionalfor action:"pick" — verify the chosen inbox live before returning it, so you are not handed a stale flag
confirm_with_pickeroptionalfor action:"pick" — do not rank a list, ask the REGISTER PICKER itself. What comes back is an inbox godbrowser_register cannot then refuse, and a refusal is the one register would have given, naming the rule that refused. ⚠️ It MUTATES: the picker soft-locks the inbox it allocates for 3 minutes, so use it or lose it. Default false (a read-only recommendation that could still be refused for a rule this list cannot see — the answer says which rule).
since_msoptionalfor action:"code" — epoch-ms of the submit that triggered this mail. Mail that arrived BEFORE it is rejected and the wait continues, so a previous attempt's code can never be handed back as this one. Defaults to 3 minutes ago.
timeout_msoptionalfor action:"code" — how long to wait for the mail (default 120000, max 240000)
linkoptionalfor action:"code" — return the confirmation LINK instead of a code, for a site that mails a magic link rather than digits
code_lenoptionalfor action:"code" — the exact code length the page is asking for (e.g. 6 boxed inputs). A parse of a different length is rejected rather than typed in.
subjectoptionalfor action:"code" — only consider mail whose subject contains this
fromoptionalfor action:"code" — only consider mail from this sender address or domain
godbrowser_next_stepLook at the current page and say WHAT STEP OF A SIGN-UP OR LOGIN IT IS and what to do next.
4 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch or godbrowser_register
goaloptionalwhat you are trying to achieve, e.g. "register an account" (default) or "log in"
emailoptionalthe account email in play — lets the answer tell you WHICH inbox to read a code from
noteoptionalanything you already know that the page does not show, e.g. "the code was already submitted once and rejected"
godbrowser_phoneYour BusySMS phone numbers, for catching an SMS verification code.
12 parameters
actionoptional"status" (default) = is BusySMS linked and can anything receive; "numbers" = one row per number with can_receive + reason; "pick" = choose a number for a site and start a verification; "wait_code" = wait for the code to arrive; "manual_code" = record a code you read off your own phone
deviceoptionalpin a specific number instead of letting one be chosen — the "device" handle or the 4-digit "tail" from action:"numbers". On "pick" it selects that number; on "wait_code" it watches that number. Use it when you know which phone the code will land on.
targetoptionalfor "pick" — the site the number is for, e.g. "simplenote" or a domain. Used to avoid a number already burned on that site.
verification_idoptionalfor "wait_code" — the id returned by "pick"
brand_hintoptionalfor "wait_code" — the brand name as it appears in the message BODY, e.g. "Simplenote". More reliable than the sender, which is usually a numeric shortcode or a shared aggregator.
timeout_msoptionalfor "wait_code" — how long to wait for the SMS (default 180000, max 300000)
since_msoptionalfor "wait_code" — ignore codes older than this epoch-ms. Defaults to 2 minutes ago so a code from an EARLIER attempt is not returned as this one.
custom_numberoptionalfor "pick" — use YOUR OWN number instead of a linked BusySMS one, e.g. "+37360000000". GodBrowser fills it into the form but cannot read the SMS, so you enter the code yourself and hand it back with action:"manual_code". Use this when BusySMS is not linked, or when a site needs a specific number.
allow_reuseoptionalfor "pick" — this is a LOGIN to an existing account, so reuse the number even though it has already been used on this site. Registration deliberately refuses a reused number; signing back in requires one.
forceoptionalfor "pick" with a pinned device — use that number even though BusySMS reports it as unable to receive right now. Only for a phone you can actually see; the answer states what BusySMS said so a real outage is still visible.
codeoptionalfor "manual_code" — the verification code you read off your own phone
allow_paid_fallbackoptionalfor "pick" — if BusySMS cannot supply a number, rent one from the paid provider instead. Default FALSE: a tool call never spends money unless you ask it to.
godbrowser_recipe_from_recordingTurn a screencast recording into a replayable recipe: the video and the flow come from the SAME drive, so you record once and get both.
3 parameters · 2 required
session_idrequiredthe session that was driven AND recorded
namerequireda name for the saved recipe
recording_idoptionalthe screencast recording to correlate with (default: the session's most recent)
godbrowser_recordShow the steps recorded so far on this session — the flow that godbrowser_save_recipe would store.
2 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
actionoptional"status" (default) shows the recorded steps; "clear" discards them and starts recording this session over
godbrowser_register_agenticRegister an account on any site by OBSERVING each step instead of following a fixed script: it looks at the page, works out what step it is, does it, and looks again — through sign-up forms, email codes, SMS codes, consent, region and plan choosers — until the account exists or it is genuinely stuck
6 parameters · 1 required
targetrequiredthe site to register on (a domain or a sign-up URL)
emailoptionaluse THIS inbox (must be one of yours); omit to have one picked and locked for you
max_stepsoptionalhow many steps to attempt before stopping (default 12)
headedoptionalshow the browser window (default true, so you can watch)
dry_runoptionalclassify each step and report what it WOULD do, without typing or clicking anything
typing_wpmoptionaltyping speed (default 110; 40 floor, 160 ceiling)
godbrowser_screencastWatch a live GodBrowser session in your browser, and record it for replay.
7 parameters
session_idoptionalthe session_id from godbrowser_launch. Required for status/start/stop/record/stop_record; omit for list (lists every recording) and for play/delete addressed by recording_id.
actionoptionalstatus (default) = what is actually happening now; start = begin the live stream and return watch_url; stop = end the stream AND close any open recording; record = start (if needed) and begin saving frames to disk; stop_record = close the recording, keep streaming; list = stored recordings, newest first; play = a URL for a stored recording; delete = remove one.
fpsoptionalframes per second, 1-15 (default 4). Frames beyond this are dropped as they arrive, never buffered -- a live view that is thirty seconds behind is worthless.
qualityoptionalJPEG quality 1-100 (default 60)
max_widthoptionallongest edge in CSS px (default 1280). The browser scales the frame; we never re-encode.
labeloptionalfor action:"record" -- a human name for this recording, e.g. "otp attempt 3"
recording_idoptionalfor action:"play" / "delete" -- the id from action:"list" (rec_...)
godbrowser_swipeSwipe with a REAL touch gesture (up/down/left/right), on the whole page or on one element.
6 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch
directionoptionalup | down | left | right (default up — the direction your FINGER moves, so "up" scrolls the page down, as on a phone)
selectoroptionaloptional: anchor the gesture on this element (a specific carousel), instead of the viewport centre
distanceoptionalpixels to travel (default ~60% of the smaller viewport side)
duration_msoptionalhow long the gesture takes (default 300). Velocity matters: momentum and fling handlers read the movement profile, not just the endpoints.
stepsoptionalintermediate touchMove points (default 12) — a single jump produces no velocity at all
godbrowser_typingChange how fast the register/login flow types, on a browser that is already running — no relaunch.
4 parameters · 1 required
session_idrequiredthe session_id from godbrowser_launch or godbrowser_register
wpmoptionalwords per minute for per-key typing: 40 (slow) to 160 (ceiling). 65 is an average human, 110 a fast one. Omit to leave unchanged.
jitteroptionalhow much the per-key timing varies, 0..1 (default ~0.35). Lower is more machine-like — 0 is a metronome and an obvious tell.
humanoptionalfalse = fill each field instantly in one bulk set (TEST ONLY: no inter-key timing at all, an obvious automation signature). true = per-key typing.

Access tiers. The reading surface — navigate, read_page, extract (including extractSchema), click, type, the asserts, tabs and frames — is available on every tier. Interactive live sessions are their own tier, and it is off by default. When it is not enabled for your account, godbrowser_launch, godbrowser_scrape_templates, godbrowser_session, godbrowser_set_persona answers external_tier_not_enabled — the batch surface (godbrowser_submit, godbrowser_run_recipe, godbrowser_status, godbrowser_results) stays available to you. A few DRIVE verbs stay first-party/operator-only in v1 — godbrowser_eval, godbrowser_protections, godbrowser_recipe_from_recording, godbrowser_save_recipe, godbrowser_wait_for_function answer first_party_only. godbrowser_login, godbrowser_register are operator-only in v1 and answer operator_only_v1. Each of these is a clean, named error rather than a silent failure, so a client can tell "not enabled for you" apart from "that call went wrong".

Saved logins, and what a restore actually restores. When the machine running GodBrowser is signed in to an account, godbrowser_launch now persists by default — the session banks its logins into a stable default profile, so the same session can be brought back from any other computer. Pass persist:false for a throwaway run that leaves nothing in your account. A godbrowser_session restore then reproduces the whole identity rather than just the cookies: the device it was banked on (OS/browser/persona), its locale, and the egress country it was created from — it tries the same exit, then any exit in that country, then falls back to the local machine and says so, in egress_continuity. That matters because a returning session whose device or country changed is a stronger signal than a fresh login would be. Do not pass os or browser to a restore unless you deliberately intend to override the banked device — the response reports persona_restored, persona_banked and egress_continuity so you can check what you actually got.

Choosing your egress. godbrowser_proxy reports what you have — providers, the exit country of each, sticky vs rotating and how often, and which lines are pool sources rather than direct exits — and parses any proxy string you paste, in any provider format. It never returns a password. Then launch through it with proxy (an explicit string) or proxy_provider / proxy_country (pick out of your configured pool). An exit whose provider string states no country is excluded rather than assumed to match, so you never silently egress from somewhere else, and the launch reports the exit it actually chose instead of a bare success.

Launching from a link. The same launch options travel in a gb://open?… URL, so a portal button or a runbook can open GodBrowser on the right saved session, device, locale and egress country. It is argv-only by design — a page cannot trigger one without the operating system's own open-in prompt — and it refuses a proxy credential or a non-http(s) landing page outright. godbrowser_link builds one for you (and does the percent-encoding in code, which is the part that goes wrong by hand). The keys, the encoding rule and the full refusal contract are on the parameter reference. Registration and parsing are verified; end-to-end delivery from a real click is still being confirmed per platform, so treat the scheme itself as arriving in an upcoming build.

Recipes — record, then replay. Drive a flow once, save it with godbrowser_save_recipe, then replay it deterministically at scale with godbrowser_run_recipe (no AI in the replay path). A recipe is data, not code — an ordered list of recorded steps (navigate/click/type/select/press/scroll/wait/extract/screenshot) with their recorded arguments; page-script evaluation steps are never recorded into a recipe, and a recipe containing one is rejected before replay begins. Recipes are scoped to your account: you list, replay and delete only your own. recipe-replay is also a named built-in code_ref alongside flagship-scrape-quotes, books-catalog, books-detail and custom-scrape — it is the deterministic replay walker that godbrowser_run_recipe submits for you.

From your AI client, a full run is three calls — submit, poll, pull:

godbrowser_submit({ code_ref: "flagship-scrape-quotes", os: "windows", seed: "run-1", count: 10 })  → { job_id, task_ids }
godbrowser_status({ job_id })   → status: succeeded, result_count: 300
godbrowser_results({ job_id })  → rows (10 coherent per-seed shards, one job)

Run your OWN target at scale — not bounded to the demo code_refs: pass url + a fields CSS-selector map (and optional item_selector for a repeating list/table) to godbrowser_submit, and it fans the vetted custom-scrape builtin (deterministic CSS extract, no code upload) across the fleet:

godbrowser_submit({ url: "https://example.com/products", item_selector: ".product",
                    fields: { title: ".name", price: ".price", "tags[]": ".tag" }, count: 3 })
  → runs the custom-scrape builtin on your own URL, fanned 3 ways

Playbook — record → analyze → optimize

When a browser-driven automation is slow or brittle, reduce it to a direct requests-only path:

  1. Run a session with a BusyMate capture device (--bm-device-name=<label> + --bm-auth-file=<account busymate_auth>).
  2. Perform the action — navigate / filter / submit.
  3. If the busymate-net MCP is connected, summarize_device_traffic(<device>) then inspect_requests(host, path_contains, method=POST) the captured traffic.
  4. Identify the data endpoint — the XHR / GraphQL / REST op returning the records.
  5. Reconstruct a direct requests-only call → instant data.

Worked example: investigating 999.md this way surfaced POST /graphql (op SearchAds); replaying it directly returned the full ~88,793-car dataset. The native capture_network verb (roadmap) will make this in-browser.

Why MCP

Full cluster control

Create, run, and pull workflows across every node you've enrolled — without leaving your AI client.

Auth is your GodBrowser account

One-click Authorize with GodBrowser in your browser — approve the consent screen once and a per-device token is minted; no key to paste, no client to configure, and every grant is revocable per device.

Built for scale

Queue a million pages and fire-and-forget — the cluster shards the run across your nodes and drives it autonomously.

Results stream incrementally

Watch rows arrive as the run progresses with godbrowser_results paging — not just a dump at the end.

Auth & connection

Add the URL, then authorize in your browser: your MCP client discovers the authorization server, registers itself, and opens the GodBrowser consent screen. Approve it once and a per-device token is minted under your account — no key to paste, no client config.

The same authorization works across every machine and client; each is a separately-revocable grant. Revoke any device from the dashboard's API Keys.

Open the dashboard →Read the docs →