Skip to content

Browser Tools

All browser tools execute locally on your machine via Playwright. They operate on a shared browser instance that persists across calls within a session.

Each browser tool uses an action parameter to group related operations. Most actions automatically return a page snapshot so your AI assistant always has current context.

browser_navigate

Navigate the browser: go to a URL, go back, or go forward.

ParameterTypeRequiredDescription
actionenumNonavigate (default), go_back, or go_forward
urlstringConditionalURL to navigate to (required for navigate)
return_snapshotbooleanNoReturn page snapshot (default: true)
include_debugbooleanNoInclude console errors and failed network requests (default: false)
// Navigate to a URL
{ "url": "https://myapp.example.com/login" }
// Go back
{ "action": "go_back" }
// Go forward
{ "action": "go_forward" }

browser_interact

Interact with page elements: click, hover, type (keystroke-by-keystroke), fill (replace value), select a dropdown option, or press a key.

ParameterTypeRequiredDescription
actionenumYesclick, hover, type, fill, select_option, or press_key
selectorstringConditionalCSS selector (required for click, hover, type, fill, select_option)
valuestringConditionalValue to type/fill, option to select, or key to press (required for type, fill, select_option, press_key)
slowlybooleanNoType with 100ms delay between keystrokes (only for type, useful for autocomplete)
submitbooleanNoPress Enter after typing (only for type)
return_snapshotbooleanNoReturn page snapshot (default: true)
include_debugbooleanNoInclude console errors and failed network requests
// Click an element
{ "action": "click", "selector": "#login-button" }
// Hover over a dropdown trigger
{ "action": "hover", "selector": ".dropdown-trigger" }
// Type keystroke-by-keystroke (good for autocomplete)
{ "action": "type", "selector": "#search", "value": "test", "slowly": true }
// Fill a field (replaces existing value)
{ "action": "fill", "selector": "#email", "value": "[email protected]" }
// Select a dropdown option
{ "action": "select_option", "selector": "#country", "value": "US" }
// Press a key
{ "action": "press_key", "value": "Enter" }

browser_form

Fill multiple form fields at once or upload files.

ParameterTypeRequiredDescription
actionenumYesfill_form or file_upload
fieldsobjectConditionalMap of CSS selector to value (required for fill_form)
selectorstringConditionalCSS selector of the file input (required for file_upload)
pathsstring[]ConditionalAbsolute file paths to upload (required for file_upload)
return_snapshotbooleanNoReturn page snapshot (default: true)
include_debugbooleanNoInclude console errors and failed network requests
// Fill multiple fields at once
{
"action": "fill_form",
"fields": {
"#email": "[email protected]",
"#password": "secret123",
"#name": "Test User"
}
}
// Upload a file
{
"action": "file_upload",
"selector": "input[type=file]",
"paths": ["/Users/me/photo.jpg"]
}

browser_observe

Observe the current page state: get an accessibility snapshot, take a screenshot, view console logs, or inspect network requests.

ParameterTypeRequiredDescription
actionenumYessnapshot, screenshot, console_logs, or network_requests
full_pagebooleanNoCapture full scrollable page (only for screenshot, default: false)
filter_statusnumberNoOnly show requests with this HTTP status or higher (only for network_requests, e.g. 400)
// Get accessibility tree
{ "action": "snapshot" }
// Take a screenshot
{ "action": "screenshot", "full_page": true }
// Get console logs (last 100 messages)
{ "action": "console_logs" }
// Get network requests (errors only)
{ "action": "network_requests", "filter_status": 400 }

browser_assert

Run assertions or wait for elements on the live page.

ParameterTypeRequiredDescription
actionenumYesassert or wait
typeenumConditionalAssertion type (required for assert — see below)
selectorstringConditionalCSS selector (for element assertions and wait)
textstringConditionalExpected text
urlstringConditionalExpected URL
countnumberConditionalExpected element count
attributestringConditionalAttribute name
valuestringConditionalExpected attribute value
expressionstringConditionalJavaScript expression (for evaluate_truthy)
timeout_msnumberNoTimeout in milliseconds (default: 10000, for wait)
return_snapshotbooleanNoReturn page snapshot (default: true)
include_debugbooleanNoInclude console errors and failed network requests

Assertion types:

TypeRequired ParamsDescription
element_visibleselectorAssert element is visible
element_hiddenselectorAssert element is hidden
text_containsselector, textAssert element text contains value
text_equalsselector, textAssert element text equals value exactly
url_containstextAssert current URL contains string
url_equalsurlAssert current URL equals value exactly
element_countselector, countAssert number of matching elements
attribute_valueselector, attribute, valueAssert element attribute equals value
evaluate_truthyexpressionAssert JavaScript expression evaluates truthy
// Assert login page URL
{ "action": "assert", "type": "url_contains", "text": "/login" }
// Assert button is visible
{ "action": "assert", "type": "element_visible", "selector": "#submit-btn" }
// Assert heading text
{ "action": "assert", "type": "text_equals", "selector": "h1", "text": "Welcome Back" }
// Assert JS expression
{ "action": "assert", "type": "evaluate_truthy", "expression": "document.querySelectorAll('.item').length > 0" }
// Wait for element
{ "action": "wait", "selector": ".loading-spinner", "timeout_ms": 15000 }
// Wait 2 seconds
{ "action": "wait", "timeout_ms": 2000 }

browser_session

Manage browser sessions: save cookies and localStorage, restore a saved session, or open a headed browser for interactive OAuth/SSO login.

ParameterTypeRequiredDescription
actionenumYessave, restore, or login
namestringYesSession name (e.g., admin, user, default)
urlstringConditionalURL to navigate to (required for login)
return_snapshotbooleanNoReturn page snapshot after restore/login (default: false)
// Save current session
{ "action": "save", "name": "admin" }
// Restore a saved session
{ "action": "restore", "name": "admin" }
// Interactive login (opens headed browser)
{ "action": "login", "name": "admin", "url": "https://myapp.example.com/login" }

Sessions are stored locally at ~/.fasttest/sessions/{orgSlug}/{name}.json with restrictive permissions.

browser_page

Page-level operations: manage tabs, resize the viewport, execute JavaScript, handle dialogs, or drag-and-drop.

ParameterTypeRequiredDescription
actionenumYestabs, resize, evaluate, handle_dialog, or drag
tab_actionenumConditionallist, create, switch, or close (for tabs)
urlstringNoURL for new tab (for tabs/create)
indexnumberNoTab index (for tabs/switch and tabs/close)
widthnumberConditionalViewport width in pixels (for resize)
heightnumberConditionalViewport height in pixels (for resize)
expressionstringConditionalJavaScript expression to evaluate (for evaluate)
dialog_actionenumConditionalaccept or dismiss (for handle_dialog)
prompt_textstringNoText for prompt dialogs (for handle_dialog with accept)
sourcestringConditionalCSS selector of element to drag (for drag)
targetstringConditionalCSS selector of drop target (for drag)
return_snapshotbooleanNoReturn page snapshot (default: true)
include_debugbooleanNoInclude console errors and failed network requests
// List all tabs
{ "action": "tabs", "tab_action": "list" }
// Open new tab
{ "action": "tabs", "tab_action": "create", "url": "https://myapp.example.com/settings" }
// Switch to second tab
{ "action": "tabs", "tab_action": "switch", "index": 1 }
// Resize viewport (mobile)
{ "action": "resize", "width": 375, "height": 812 }
// Execute JavaScript
{ "action": "evaluate", "expression": "document.title" }
// Accept a dialog
{ "action": "handle_dialog", "dialog_action": "accept" }
// Accept a prompt dialog with text
{ "action": "handle_dialog", "dialog_action": "accept", "prompt_text": "My answer" }
// Drag and drop
{ "action": "drag", "source": ".draggable-item", "target": ".drop-zone" }