Wraith Browser

Navigation

Core browsing tools -- navigate, scroll, wait, tabs, history, and engine config

Navigation tools handle page loading, scrolling, waiting, and browser state inspection. These are the foundation of every browsing session. The native Sevro engine handles most pages at ~100ms; use browse_navigate_cdp for JavaScript-heavy SPAs.

browse_navigate

Navigate to a URL and return a DOM snapshot with all interactive elements tagged with @ref IDs.

Fetches the page via HTTP, parses HTML into a full DOM tree, sets up the QuickJS JavaScript runtime with a DOM bridge, executes inline <script> tags, and returns an agent-readable snapshot. Automatically handles ATS URL resolution for supported applicant tracking systems. For pages with fewer than 10 visible elements (SPA indicator), triggers automatic SPA hydration -- fetches dynamically created scripts and executes them.

Parameters

NameTypeRequiredDefaultDescription
urlstringyes--Full URL including protocol (e.g., "https://www.example.com/page")
wait_for_loadbooleannotrueWait for page to fully load before returning the snapshot

Request

{
  "tool": "browse_navigate",
  "arguments": {
    "url": "https://example.com/careers/apply/12345"
  }
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Page: \"Apply — Software Engineer\" (https://example.com/careers/apply/12345)\n\n@e1   [text]     \"\" placeholder=\"First Name\"\n@e2   [text]     \"\" placeholder=\"Last Name\"\n@e3   [email]    \"\" placeholder=\"Email\"\n@e4   [file]     \"\"\n@e5   [button]   \"Submit Application\"\n\n5 interactive elements"
    }
  ]
}

browse_back

Go back to the previous page in browser history.

Parameters

None.

Request

{
  "tool": "browse_back",
  "arguments": {}
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Page: \"Home\" (https://example.com/)\n\n@e1   [link]   \"Careers\" href=/careers\n@e2   [link]   \"About\" href=/about\n@e3   [input:text]   placeholder=\"Search...\"\n@e4   [button]   \"Search\"\n\n4 interactive elements"
    }
  ]
}

browse_forward

Go forward in browser history.

Parameters

None.

Request

{
  "tool": "browse_forward",
  "arguments": {}
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Page: \"Apply — Software Engineer\" (https://example.com/careers/apply/12345)\n\n@e1   [text]     \"\" placeholder=\"First Name\"\n@e2   [text]     \"\" placeholder=\"Last Name\"\n\n2 interactive elements"
    }
  ]
}

browse_reload

Reload the current page and return a fresh DOM snapshot.

Parameters

None.

Request

{
  "tool": "browse_reload",
  "arguments": {}
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Page: \"Dashboard\" (https://app.example.com/dashboard)\n\n@e1   [link]   \"Settings\" href=/settings\n@e2   [button] \"Refresh Data\"\n\n2 interactive elements"
    }
  ]
}

Search the web using metasearch (DuckDuckGo + Brave). Returns titles, URLs, and snippets without navigating to any page. Supports OR query splitting for multi-variant searches.

Parameters

NameTypeRequiredDefaultDescription
querystringyes--Search query string. Supports OR for multi-variant search (e.g., "QA engineer OR SDET remote")
max_resultsintegerno10Maximum number of results to return

Request

{
  "tool": "browse_search",
  "arguments": {
    "query": "rust async runtime comparison",
    "max_results": 5
  }
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Search results for: rust async runtime comparison\n\n1. **Tokio — An asynchronous Rust runtime**\n   https://tokio.rs/\n   Tokio is an event-driven, non-blocking I/O platform for writing asynchronous applications with Rust.\n\n2. **async-std — Async version of the Rust standard library**\n   https://async.rs/\n   async-std provides an async version of the Rust standard library.\n\n3. **Smol — A small and fast async runtime for Rust**\n   https://github.com/smol-rs/smol\n   A small and fast async runtime. Smol is a lightweight async runtime...\n\n4. **Comparing Tokio, async-std, and smol — LogRocket Blog**\n   https://blog.logrocket.com/comparing-tokio-async-std-smol/\n   An in-depth comparison of Rust async runtimes...\n\n5. **Which async runtime to choose? — Rust Forum**\n   https://users.rust-lang.org/t/which-async-runtime/82831\n   Community discussion comparing the trade-offs of Tokio vs async-std..."
    }
  ]
}

browse_wait

Wait for a CSS selector to appear in the DOM or wait for a fixed duration. When a selector is provided, polls for the element up to ms milliseconds. Without a selector, pauses for the fixed duration.

Parameters

NameTypeRequiredDefaultDescription
selectorstringno--CSS selector to wait for (e.g., "#results", ".job-card")
msintegerno1000 (fixed wait) / 5000 (selector timeout)Milliseconds to wait or maximum timeout for selector

Request — wait for an element

{
  "tool": "browse_wait",
  "arguments": {
    "selector": "#search-results",
    "ms": 5000
  }
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Selector #search-results found after 320ms"
    }
  ]
}

Request — fixed delay

{
  "tool": "browse_wait",
  "arguments": {
    "ms": 2000
  }
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Waited 2000ms"
    }
  ]
}

browse_wait_navigation

Wait for a navigation event to complete after a click or form submission that triggers a page transition.

Parameters

NameTypeRequiredDefaultDescription
timeout_msintegerno5000Maximum wait time in milliseconds

Request

{
  "tool": "browse_wait_navigation",
  "arguments": {
    "timeout_ms": 10000
  }
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Navigation completed: https://example.com/dashboard (842ms)"
    }
  ]
}

browse_tabs

Show the current page URL and title. Useful for confirming which page the browser is on.

Parameters

None.

Request

{
  "tool": "browse_tabs",
  "arguments": {}
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Current tab:\n  Title: Software Engineer — Apply\n  URL:   https://example.com/careers/apply/12345"
    }
  ]
}

browse_scroll

Scroll the page viewport in a given direction by a specified number of pixels.

Parameters

NameTypeRequiredDefaultDescription
directionstringyes--Scroll direction: "up", "down", "left", or "right"
amountintegerno500Number of pixels to scroll

Request

{
  "tool": "browse_scroll",
  "arguments": {
    "direction": "down",
    "amount": 800
  }
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Scrolled down 800px. Viewport at y=800"
    }
  ]
}

browse_scroll_to

Scroll the viewport to center a specific element by its @ref ID. Use this to bring off-screen elements into view before interacting with them.

Parameters

NameTypeRequiredDefaultDescription
ref_idintegeryes--The @e reference number of the element to scroll into view

Request

{
  "tool": "browse_scroll_to",
  "arguments": {
    "ref_id": 42
  }
}

Response

{
  "content": [
    {
      "type": "text",
      "text": "Scrolled to @e42 (button \"Submit Application\"). Viewport centered at y=2340"
    }
  ]
}

Additional Navigation Tools

browse_navigate_cdp

Navigate using Chrome DevTools Protocol for JavaScript-heavy SPAs. Launches Chrome for full V8 JavaScript execution. All subsequent browse_* commands route through CDP until you call browse_navigate (native) again. Requires the cdp feature flag and Chrome installed.

NameTypeRequiredDefaultDescription
urlstringyes--Full URL including protocol
wait_for_loadbooleannotrueWait for page load before returning

browse_config

Show engine configuration (engine type, proxy, TLS profile). No parameters.

browse_engine_status

Check which engine is active (native Sevro or CDP Chrome). No parameters.

browse_enter_iframe

Switch the DOM context into a cross-origin iframe so you can interact with its elements. After entering, browse_snapshot shows the iframe's content. Use browse_back to return to the parent page.

NameTypeRequiredDefaultDescription
ref_idintegeryes--The @e reference of the iframe element from the snapshot

On this page