Jettson Browser

A headless browser driven by the agent — navigate, extract text, and screenshot pages.

Every agent gets a headless browser tab on its computer. There's exactly one browser instance per agent, reused across all jettson_browser_* calls in a single run — so multi-page workflows stay fast.

jettson_browser_navigate

Load a URL. Always call this before extract_text, click, etc.

| Field | Type | Description | | --- | --- | --- | | url (required) | string | Absolute http(s) URL. Relative paths are rejected. |

Returns:

json
{
  "url": "https://news.ycombinator.com",
  "title": "Hacker News",
  "status": 200,
  "text_preview": "Hacker News new past comments ask show jobs submit..."
}

text_preview is the first 500 characters of the body — useful for the Mind to verify it landed somewhere reasonable before paying for a full extract.

jettson_browser_extract_text

Pull visible text from the current page (or a specific element).

| Field | Type | Description | | --- | --- | --- | | selector | string | Optional CSS selector. Omit for whole-page body text. |

Returns:

json
{
  "text": "Hacker News\n...",
  "truncated": false
}

Truncated at 5,000 characters. truncated: true means the page was longer than that — agents typically narrow with a selector argument on the next call if they need the rest.

jettson_browser_click

Click an element and wait for any resulting navigation.

| Field | Type | Description | | --- | --- | --- | | selector (required) | string | CSS selector of the element to click. |

Returns the new URL and page title.

jettson_browser_fill

Fill an input or textarea.

| Field | Type | Description | | --- | --- | --- | | selector (required) | string | CSS selector of the input/textarea. | | value (required) | string | Value to type into the field. |

jettson_browser_screenshot

Capture a PNG of the current viewport (not the full page).

Returns:

json
{
  "image_base64": "...",
  "mime_type": "image/png",
  "url": "https://..."
}

Base64-encoded — your agent task can return it inline or stash it via jettson_files_write.

Example: multi-step browse

text
1. jettson_browser_navigate({ url: "https://example.com" })
2. jettson_browser_extract_text()
3. (Mind reasons over the text, finds a "Pricing" link selector)
4. jettson_browser_click({ selector: "a[href*='pricing']" })
5. jettson_browser_extract_text()

The browser instance persists across (2), (4), and (5) — no re-launch cost.

Failure modes

| Cause | Returns | | --- | --- | | Bad URL (non-http/https) | { "error": "Jettson Browser failed: url must be an http(s) URL." } | | Page load timeout (30s) | { "error": "Jettson Browser failed: navigation to <url> timed out." } | | Selector not found | { "error": "Jettson Browser failed: could not find selector …" } |

Failures are returned as the tool result — the agent loop continues and the Mind decides what to do next (retry with a different selector, give up gracefully, return a partial answer).