agentBrowser

← All adapters

import { agentBrowser } from '@routecraft/browser'

Automate a browser session using the agent-browser library. Each exchange gets an isolated session (derived from exchange.id), so split()/aggregate() flows work correctly. Use with .to(), .enrich(), or .tap(). Requires agent-browser as a peer dependency.

Navigate and take a snapshot:

import { agentBrowser } from '@routecraft/browser'

craft()
  .id('scrape-page')
  .from(simple({ url: 'https://example.com' }))
  .to(agentBrowser('open', { url: (ex) => ex.body.url }))
  .enrich(agentBrowser('snapshot', { json: true }))
  .to(log())
// Result merged into body: { stdout: '...', parsed: { snapshot: '...', refs: {...} }, exitCode: 0 }

Click an element and get text:

craft()
  .id('click-and-read')
  .from(source)
  .to(agentBrowser('click', { selector: '#submit-btn' }))
  .enrich(agentBrowser('get', { info: 'text', selector: '.result' }))
  .to(log())

Dynamic URL from exchange body:

craft()
  .id('dynamic-browse')
  .from(simple({ link: 'https://example.com/page' }))
  .enrich(agentBrowser('open', { url: (ex) => ex.body.link }))
  .enrich(agentBrowser('snapshot'))
  .to(log())

Close the session explicitly:

.to(agentBrowser('close'))

Commands:

CommandRequired OptionsDescription
openurlNavigate to a URL
clickselectorClick an element (optional newTab)
dblclickselectorDouble-click an element
fillselector, valueClear and fill a form field
typeselector, valueType text into a focused element
presskeyPress a keyboard key
hoverselectorHover over an element
focusselectorFocus an element
selectselector, valueSelect a dropdown option
checkselectorCheck a checkbox
uncheckselectorUncheck a checkbox
scrolldirectionScroll the page (up, down, left, right; optional pixels)
snapshotTake an accessibility snapshot (optional interactive)
screenshotTake a screenshot (optional path, full, annotate)
evaljsEvaluate JavaScript in the page
getinfoGet page info: text, html, value, title, url, count, attr, box, styles (optional selector, attr)
waitWait for a selector or timeout (optional selector, ms)
closeClose the browser session
backNavigate back
forwardNavigate forward
reloadReload the page
tabManage tabs (optional action: new, close, list; index; url)

Command-specific option values that accept Resolvable<T, V> can be a static value or a function (exchange) => value for dynamic resolution.

Base options (available on every command):

OptionTypeDefaultDescription
sessionstring | (exchange) => stringexchange.idOverride auto-session derived from exchange ID
headedbooleanfalseRun browser in headed mode (show window)
jsonbooleanfalseParse command output into result.parsed
argsstring[]Extra CLI flags (ignored in library mode)

Result shape (AgentBrowserResult):

FieldTypeDescription
stdoutstringText output from the command
parsedunknownParsed JSON output (only when json: true)
exitCodenumber0 for success, 1 for failure