AI agent
Browser tool
`browser_open` launches a real Chromium; the agent clicks, types, scrolls, screenshots.
web_fetch vs browser_open
web_fetch is just an HTTP GET — you get the raw HTML the server sent. Great for static sites and JSON APIs, useless for SPAs where content is JS-rendered.
browser_open spins up a real Chromium, loads the page, runs JS, waits for network idle, then lets the agent inspect the rendered DOM, click, type, and screenshot. It is slower and pricier, but it sees what the user sees.
What it can do
- Visit logged-in pages (uses your browser profile)
- Scrape JS-rendered content (SPAs, Vue, React sites)
- Screenshot to attachments (full page / viewport / element)
- Fill forms, click buttons, submit (no-captcha cases)
- Run JS expressions to extract data
- Export as PDF
- Parallel tabs for multi-page workflows
A typical call
> tool: browser_open
url: https://app.example.com/dashboard
wait_for: "[data-test=metrics-loaded]"
actions:
- { click: "[data-test=date-range]" }
- { click: "text=Last 30 days" }
- { wait_for: "[data-test=chart-rendered]" }
- { screenshot: "scratch/dashboard-30d.png", full_page: true }
- { extract: { selector: "[data-test=mrr]", attr: "textContent" } }
result:
extracted: { mrr: "$42,180" }
screenshot: scratch/dashboard-30d.pngSafety
Default is non-incognito and uses your cookies — that's how logged-in pages work. Switch to incognito or a different profile in Settings → Agent → Browser.
Strong recommendation: keep a dedicated Chromium profile for sensitive systems (bank, ops consoles), log into them only there, and never grant Kition's browser tool access to that profile. Physical isolation beats config.
When extraction fails
- Tighten
wait_for— wait for a specific element before acting - Raise
timeout_ms— slow sites or heavy APIs need more time - Audit selectors —
[data-test=...]is more stable than class names - Screenshot first — what the agent sees may not be what you expect
- Iframe content needs
enter_framebefore selectors will resolve