Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.
Warning

Malware flagged

A supply-chain scanner flagged a high-severity malware risk in this package. Treat it as unsafe to install until the finding is cleared. See Supply Chain Security in the trust breakdown.

io.github.frsorrentino/chrome-bridge

NPM · CHROME-BRIDGE-MCP · SCANNED AUG 3

Your real, logged-in Chrome as an MCP server: 63 token-efficient web-dev tools. ChromeOS included.

Available components

63 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →

Supply Chain Security42
  • Malware check failed: a supply-chain vendor flagged a high-severity malware risk. See how to fix → Fail
  • Only part of the dependency tree could be resolved (106 of 110), so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • Only part of the dependency tree could be resolved (106 of 110), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to frsorrentino/chrome-bridge). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 2 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability71
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5371 tokens (~157/item across 34 items; 34 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management13
  • Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

npm · chrome-bridge-mcp

# add to Claude Code
claude mcp add frsorrentino-chrome-bridge -- npx -y chrome-bridge-mcp
# add to Codex CLI
codex mcp add frsorrentino-chrome-bridge -- npx -y chrome-bridge-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "frsorrentino-chrome-bridge": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "chrome-bridge-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add frsorrentino-chrome-bridge --command npx --arg -y --arg chrome-bridge-mcp
# ~/.hermes/config.yaml
mcp_servers:
  frsorrentino-chrome-bridge:
    command: "npx"
    args: ["-y", "chrome-bridge-mcp"]
// mcp.json
{
  "mcpServers": {
    "frsorrentino-chrome-bridge": {
      "command": "npx",
      "args": [
        "-y",
        "chrome-bridge-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 2 Aug 26 +44
    • Malware scan: unverified → fail security
    • Malware indicator gptMalware:QwocqzvG6ZjlG5ApZuMoP-XO8DeakRB_ZBJ-P6SWamhs: high security
    • Known CVEs: unverified → partial security
    • Install scripts: unverified → pass security
    • Provenance: unverified → pass security
    • The attested source repository moved: frsorrentino/chrome-bridge security
    • Schema quality: unverified → excellent functional
    • License: unverified → pass functional
    • Stability: unverified → 0.10 functional
    • Dependency health: unverified → partial functional
    • Maintenance: unverified → pass functional
    • MCP protocol: unverified → pass functional
    • Licence: MIT functional
  • 1 Aug 26 +14
    • Schema quality: 137 → 157 functional
    • Tool coverage: unverified → 100 functional
  • 31 Jul 26 −21
    • Package version: 1.10.1 → 1.11.0 functional
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 26

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Analysed npm/[email protected]

Provenance verified

Ecosystem: npm · Outcome: verified

Reason: verified

Source repo:
frsorrentino/chrome-bridge
Certificate issuer:
https://token.actions.githubusercontent.com
Certificate SAN:
https://github.com/frsorrentino/chrome-bridge/.github/workflows/publish-npm.yml@refs/tags/v1.15.1
Rekor log index:
2305189044
Predicate type:
https://slsa.dev/provenance/v1
Subject digest:
sha512:4a796214c32d60f4350f823b9f40f5553bae56518d41931d25886cd01236c07565e8b075d49150d5f8049c868ac3ce7ca2653450983fdba14c87cff2b
Discovery method:
attestation_endpoint
Dependencies 106 packages

106 packages in the resolved dependency tree · 106 deprecated · 29 stale.

The dependency tree was only partially resolved, so these counts may be incomplete.

MCP tools — 34 exposed · ~5,205 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
assert ~188

Assert a page condition, polling until timeout: element exists/visible (optionally with count or containing text), text on page, tab url/title. Patterns: substring, or "/…/" for regex. Recorded flows replay it as a test.

NameTypeReqDescription
countnumberExact match count for selector
selectorstringElement the assertion is about; ">>>" pierces shadow DOM
statestringattached means present in the DOM, visible also requires a rendered box
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one
textstringIn the element (with selector) or anywhere on the page
timeoutnumberMax ms to wait for the condition before failing
titlestringTab title pattern
urlstringTab url pattern

No output schema declared.

No examples provided.

click ~252

Click an element, by CSS selector or by a ref (n1, n2…) from get_interactives or navigate. Fires a real pointer sequence, so it can submit, open a dialog or navigate away — use wait_after to let that settle. Not idempotent, and a click that triggers a native confirm() blocks the bridge: install handle_dialogs first.

NameTypeReqDescription
buttonstringright opens the page context menu instead of activating the element
countnumber2 emits dblclick after the two clicks, which is what selects a word or opens an editor
forcebooleanClick even if occluded
frame_idnumberTarget iframe id from get_frames; omitted = main frame
refstringFrom get_interactives, e.g. "n3"
selectorstringCSS selector; ">>>" pierces shadow DOM. Ignored when ref is given
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one
wait_afterstringSettle before returning: navigation waits for a page load, networkidle for quiet traffic

No output schema declared.

No examples provided.

clipboard ~73

Read or write the system clipboard (text). Activates the tab first.

NameTypeReqDescription
actionstringyeswrite takes text; read returns the current clipboard contents
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one
textstringFor write

No output schema declared.

No examples provided.

create_tab ~172

Open a new tab, optionally at a URL, and make it the implicit target of later commands in this session. Each call creates another tab: reuse a tab_id or navigate() to move an existing one instead of piling up tabs.

NameTypeReqDescription
activebooleanfalse opens the tab in the background, leaving the current one focused
heightnumberWindow height px (new_window)
leftnumberWindow x on the virtual desktop (new_window)
new_windowbooleanOpen in a fresh window instead of a tab; with left/top it lands on the chosen monitor
topnumberWindow y (new_window)
urlstringURL to open (default: new tab page)
widthnumberWindow width px (new_window)

No output schema declared.

No examples provided.

dismiss_overlays ~59

Dismiss cookie banners/modal overlays: OneTrust, Cookiebot, Usercentrics, then generic heuristic. Idempotent.

NameTypeReqDescription
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

element_screenshot ~104

Screenshot cropped to one element (PNG), scrolled into view first. Read-only. The cheapest image in the set, because it carries only the box you asked for: a component, a chart, a table cell.

NameTypeReqDescription
selectorstringyesCSS selector; ">>>" pierces shadow DOM. The element is scrolled into view first
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

execute_js ~111

Run JavaScript in the page (MAIN world). Requires the extension's "Allow user scripts" toggle; errors explain setup if disabled.

NameTypeReqDescription
codestringyesJS evaluated in the page; the value of the last expression is returned
frame_idnumberTarget iframe id from get_frames; omitted = main frame
max_lengthnumberMax output chars
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

extract ~181

Read repeated non-tabular structures — product cards, list items, search results — as one record per item: item_selector matches the repeating block, fields map output names to selectors relative to it. Read-only, deterministic, parsed server-side from the main-document HTML.

NameTypeReqDescription
fieldsobjectyesfield name → {selector, attr}
formatstringlines is compact; json keeps one object per record
item_selectorstringyesCSS selector matching each item
max_itemsnumberCap on records returned, in document order
max_lengthnumberMax output chars
save_tostringAbsolute path: write the records as JSON there and return the path instead of the content
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

fill_form ~125

Batch fill form fields with React-compatible events. Handles input, select, checkbox, radio, and textarea.

NameTypeReqDescription
fieldsarrayyes{selector, value} pairs
frame_idnumberTarget iframe id from get_frames; omitted = main frame
submit_selectorstringSubmit button to click after filling
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one
wait_afterstringSettle before returning: navigation waits for a page load, networkidle for quiet traffic

No output schema declared.

No examples provided.

find_text ~113

Find text on the page: parent selector, context, visibility, position per match. Attaches nearby interactive elements (with refs for click/type_text/hover) for the first visible match.

NameTypeReqDescription
case_sensitivebooleanMatch case exactly
max_resultsnumberCap on matches returned, in document order
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one
textstringyesLiteral text to find, not a regex

No output schema declared.

No examples provided.

full_page_screenshot ~233

Full-page capture by scrolling: stitched segments of ~2 viewports (≤1568px, top→bottom), or one image per viewport with stitch=false. Read-only, but expensive: each segment costs ~2.7k image tokens, so only the first max_segments are returned and the rest need segment_offset. On a long page, reading the text you actually need is cheaper by an order of magnitude — prefer read_page, extract or find_text unless the layout itself is the question.

NameTypeReqDescription
delaynumberms between captures (min 500, Chrome quota)
max_scrollsnumberCap on scroll steps: a taller page is captured only up to here
max_segmentsnumberImages returned, from the top (each ≈2.7k image tokens); raise or use segment_offset for the rest
segment_offsetnumberSkip the first N segments
stitchbooleanfalse = one image per viewport
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

get_frames ~59

List frames (main + iframes) with frameId, parent, URL — for the frame_id parameter of DOM tools.

NameTypeReqDescription
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

get_interactives ~157

List actionable elements (buttons, links, inputs, [role], [onclick]) with ready-to-use CSS selector, label, position, flags. Prefer this over dumping HTML to discover selectors.

NameTypeReqDescription
formatstringlines is compact; json adds full attributes per element
frame_idnumberTarget iframe id from get_frames; omitted = main frame
limitnumberMax elements returned; raise it on a dense page
scopestringLimit search (CSS selector)
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one
visible_onlybooleanfalse also lists elements hidden or scrolled out of view

No output schema declared.

No examples provided.

get_page_info ~70

Get page metadata: meta tags, scripts, stylesheets, links, and forms

NameTypeReqDescription
frame_idnumberTarget iframe id from get_frames; omitted = main frame
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

get_status ~26

Check bridge status: extension connection, server mode (primary/relay), port, version

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_tabs ~114

List every open tab with id, url, title and active flag. Read-only. Use it to find a tab_id when the implicit target (last navigated tab, else the active one) is not the tab you mean. include_windows adds the windows themselves with their position, size, state and type — what you need before moving or tiling anything, and the only way to tell which monitor a window is on.

NameTypeReqDescription
include_windowsbooleanAlso return the windows with bounds, state, type and tab count

No output schema declared.

No examples provided.

handle_dialogs ~94

Auto-accept/dismiss future JS dialogs (alert/confirm/prompt), logging them. reset restores native dialogs and returns the log.

NameTypeReqDescription
actionstringaccept/dismiss auto-answer future dialogs; reset restores native behaviour
prompt_textstringReturned by window.prompt on accept
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

hover ~104

Hover over an element (mouseenter/mouseover), by CSS selector or ref.

NameTypeReqDescription
frame_idnumberTarget iframe id from get_frames; omitted = main frame
refstringFrom get_interactives
selectorstringCSS selector; ">>>" pierces shadow DOM. Triggers CSS and JS hover handlers
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

http_request ~202

HTTP request sent from the browser, so it carries the session cookies of the logged-in user: fetches URLs a plain server-side request would get a login page for (invoices, authenticated JSON, CSV exports). Text bodies are returned inline (capped by max_length); with save_to the bytes are written to that path instead, which is how you read a PDF — Chrome renders PDFs in a viewer no content script can reach, so read_page returns nothing on a PDF tab.

NameTypeReqDescription
bodystringRequest body (POST/PUT/PATCH)
headersobjectExtra request headers
max_lengthnumberMax chars of body returned inline
methodstringHEAD fetches headers only, without the body
save_tostringAbsolute path: write the response bytes here instead of returning them (PDF, images, archives)
urlstringyesAbsolute URL. Cookies are sent for its origin

No output schema declared.

No examples provided.

monitor_network ~135

Monitor network requests. source=page: XHR/fetch hook (installed on first call); source=browser: all requests incl. static assets. format=har exports HAR 1.2.

NameTypeReqDescription
clearbooleanClear buffer after read
formatstringhar exports HAR 1.2 for external tooling
limitnumberMost recent; buffer 1000
sourcestringpage sees XHR/fetch only; browser also sees static assets
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

move_tab ~342

Move an existing tab into another window (chrome.tabs.move). Nothing is created or closed: the tab keeps its id, history and page state, and this works even on chrome-untrusted:// tabs where creating one is forbidden — verified on a ChromeOS Terminal tab. The **destination** must be a normal window: moving out of an app or popup window is fine, moving into one is refused with "Tabs can only be moved to and from normal windows". So a ChromeOS Terminal session can be pulled out to its own window (new_window, then position it with viewport_resize) but cannot be merged back into the Terminal window — the closest look is window_type popup: no tab strip, no omnibox, visually a terminal window. An extension cannot create app windows: normal and popup are all Chrome offers.

NameTypeReqDescription
heightnumberNew window height px (new_window)
indexnumberPosition in the destination window; -1 appends at the end
leftnumberNew window x (new_window)
new_windowbooleanExtract the tab into a fresh window instead — tabs.move needs an existing window, this does not
tab_idnumberyesTab to move; get it from get_tabs
topnumberNew window y (new_window)
widthnumberNew window width px (new_window)
window_idnumberDestination window; get_tabs reports windowId for every tab
window_typestringnew_window only: popup has no tab strip and no omnibox — the terminal-window look for detached chrome-untrusted://terminal tabs

No output schema declared.

No examples provided.

navigate ~74

Navigate a Chrome tab to a URL. Returns a preview of interactive elements with refs usable in click/type_text/hover.

NameTypeReqDescription
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one
urlstringyesAbsolute URL, or a path resolved against the current page

No output schema declared.

No examples provided.

press_key ~192

Send a key to the focused element (or to selector, focusing it first) as a real keydown/keypress/keyup sequence, so framework handlers fire. For typing a value use type_text; this is for Enter, Tab, Escape, arrows and shortcuts. Not idempotent: two calls send the key twice.

NameTypeReqDescription
altbooleanHold Alt
ctrlbooleanHold Control
frame_idnumberTarget iframe id from get_frames; omitted = main frame
keystringyese.g. "Enter", "Escape", "Tab", "ArrowDown"
metabooleanHold Meta (Command/Windows)
selectorstringTarget (default: activeElement)
shiftbooleanHold Shift
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

query_dom ~132

Query DOM elements by CSS selector, returning structure, attributes, bounding rect, and computed styles.

NameTypeReqDescription
frame_idnumberTarget iframe id from get_frames; omitted = main frame
limitnumberMax elements returned, from the top of the match list
propertiesarrayComputed styles to include, e.g. ["color"]
selectorstringyesCSS selector; ">>>" pierces shadow DOM. Matches all, not just the first
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

read_console ~109

Read console messages captured since page load, incl. uncaught errors and unhandled rejections.

NameTypeReqDescription
clearbooleanClear buffer after read
formatstringlines is compact; json keeps timestamps and stack traces
levelstringall merges every level in one chronological list
limitnumberMost recent; buffer 1000
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

read_page ~205

Read the page as text (default), markdown, raw HTML, or accessibility tree. Read-only. markdown keeps headings, links and tables at a fraction of the HTML cost, and is usually the right middle ground. Expensive on large pages: HTML on a big table costs tens of thousands of tokens for data you then filter anyway — prefer extract_table or extract for tabular and repeated content, and get_interactives to find click targets.

NameTypeReqDescription
frame_idnumberTarget iframe id from get_frames; omitted = main frame
max_lengthnumberMax output chars
modestringtext strips markup, markdown keeps headings/links/tables far cheaper than html, accessibility returns the a11y tree
save_tostringAbsolute path: write the page there and return the path instead of the content
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

screenshot ~106

Screenshot of the visible viewport only (PNG), at the current scroll position. Read-only. Activates the tab in the background without stealing window focus, then restores the previous tab. Downscaled to ≤1568px, so fine print may not survive.

NameTypeReqDescription
save_tostringAbsolute path: write the PNG there and return the path instead of the content
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

scroll ~256

Scroll. action=to: once to element/coordinates; action=until: repeatedly until element visible, network idle, or no new content (infinite scroll).

NameTypeReqDescription
actionstringto jumps to a position or element; until scrolls repeatedly to load more
behaviorstringinstant avoids waiting for smooth-scroll animations
frame_idnumberTarget iframe id from get_frames; omitted = main frame
max_scrollsnumberCap on scroll steps, so an infinite feed terminates
offset_ynumberpx offset for fixed headers (to)
selectorstringTarget (to) or stop element (until=element)
settle_msnumberPause ms after each step
step_pxnumberpx per step, default viewport height
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one
untilstringno_new_content stops when the page height stops growing
xnumberAbsolute horizontal position in px (action=to, without selector)
ynumberAbsolute vertical position in px (action=to, without selector)

No output schema declared.

No examples provided.

tab_action ~199

Tab lifecycle: close, activate (focus), reload (optional cache bypass), back, forward. close discards the tab and anything unsaved in it, and cannot be undone — it may be a tab the user is working in. reload and navigation drop injected CSS, emulations and page hooks. duplicate works where create_tab is forbidden (chrome-untrusted://, verified on a ChromeOS Terminal tab) and lands in the source tab's own window, app windows included — the only way to open a new Terminal session inside the Terminal window. discard replaces the tab id: the result carries the new one, saved ids go stale.

NameTypeReqDescription
actionstringyesclose cannot be undone; discard frees memory, the tab reloads on focus; reload drops injected CSS and hooks
bypass_cachebooleanreload only
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

tile_windows ~230

Tile Chrome windows over one monitor, splitting its usable area into equal parts that leave no gap. Only Chrome windows: an extension cannot touch other applications. The monitor is chosen by pointing at a window already on it, since the work area is read from a page there — so at least one target window needs a scriptable tab (a chrome:// or chrome-untrusted:// tab cannot provide it). Maximized windows are restored first, because a maximized window accepts bounds and ignores them.

NameTypeReqDescription
areaobjectMonitor area to fill, when no target window has a scriptable tab to read it from
include_typesarrayWindow types to include; omitted = normal only
layoutstringcolumns splits left to right, rows top to bottom, grid keeps tiles as square as it can
paddingnumberPx of empty margin kept inside the work area
reference_window_idnumberWindow whose monitor is used; omitted = the focused one
window_idsarrayWindows to tile; omitted = every normal window on the reference monitor

No output schema declared.

No examples provided.

type_text ~255

Put text into an input, textarea or contenteditable, by CSS selector or by a ref from get_interactives. Replaces the whole value rather than appending, and assigns through the native setter so React and Vue controlled inputs register the change, then fires input and change. mode=keys instead emits keydown/input/keyup per character, which is what autocomplete and masked fields need — slower, so reach for it only when mode=set leaves the field empty or the dropdown never opens.

NameTypeReqDescription
frame_idnumberTarget iframe id from get_frames; omitted = main frame
modestringset = assign value; keys = per-char events (autocomplete/masked)
refstringFrom get_interactives, e.g. "n3"
selectorstringCSS selector; ">>>" pierces shadow DOM. Ignored when ref is given
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one
textstringyesValue to type; empty string clears the field
wait_afterstringSettle before returning: navigation waits for a page load, networkidle for quiet traffic

No output schema declared.

No examples provided.

upload_file ~100

Set a file on input[type=file] from the server filesystem via DataTransfer (max 10MB).

NameTypeReqDescription
mime_typestringDefault: inferred from extension
pathstringyesAbsolute path on the server machine
selectorstringyesThe file input to fill; ">>>" pierces shadow DOM
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one

No output schema declared.

No examples provided.

wait_for ~308

Block until a condition holds: element (selector in the DOM), function (JS expression turns truthy; needs the "Allow user scripts" toggle), navigation (mode=spa for client-side route changes), network_idle. Polls until timeout — 10s for element and function, 15s for navigation and network_idle — then **returns `found: false` with a reason instead of raising**, so a caller that ignores the result silently proceeds as if the wait had succeeded. Read-only: waiting changes nothing on the page.

NameTypeReqDescription
conditionstringyeselement and text need selector or text; function needs expression
expressionstringJS expression (condition=function)
frame_idnumberTarget iframe id from get_frames; omitted = main frame
idle_msnumberQuiet period ms (network_idle)
intervalnumberPoll ms, min 50
modestringspa = pushState/popstate/hashchange
selectorstringcondition=element; with condition=text it narrows the search to that subtree
tab_idnumberTarget tab; omitted = last tab navigated in this session, else the active one
textstringLiteral text to wait for (condition=text), matched case-insensitively
timeoutnumberMax ms (default 10000; 15000 navigation/network_idle)
visiblebooleanElement must also be visible

No output schema declared.

No examples provided.

window_layout ~125

Save the current window arrangement under a name, restore one, list or delete saved ones. save overwrites a same-named layout without asking. Window ids do not survive a browser restart, so restore recognises windows by the overlap of their tab URLs (same type required) and repositions the best match — windows it cannot recognise are reported, not guessed. Needs extension >= 1.14.0 for window geometry.

NameTypeReqDescription
actionstringyessave snapshots every window; restore repositions the recognised ones
namestringLayout name, required except for list

No output schema declared.

No examples provided.