Soul-driven AI agent with 60+ tools, web search, vision, 12 LLM providers, local web UI, browser/desktop/Android automation, MCP plugins, REST API, Second Brain memory, and multi-channel access (CLI, Telegram, WhatsApp, REST API).
21 browser automation tools with consistent naming (verb_noun pattern: browser_*) and detailed descriptions (avg 150 chars). All tools have input schemas with type definitions and parameter descriptions. However, output schemas are not documented, LLMs cannot predict return structure. Error handling is minimal (generic try-catch blocks returning error messages rather than actionable recovery guidance). No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification (READ_ONLY vs WRITE). Parameter descriptions are good but lack format constraints (e.g., CSS selector syntax, timeout ranges). Missing idempotency guarantees and confirmation patterns for destructive operations (browser_cookies_clear, browser_close).
Click an element on the current browser page. Use a CSS selector or visible text to target the element.
Close the browser session and free up resources. Call this when done with browser tasks.
Clear all cookies from the current browser session. Use for resetting auth state or starting a clean session.
Get all cookies from the current browser session. Useful for inspecting auth tokens and session state.
Set a cookie in the current browser session. Use for injecting auth tokens or session cookies.
Drag an element (or screen coordinates) to a target element (or coordinates) on the current browser page.
Switch the browser engine used for all browser tools. Choose between Chromium (default), Firefox, or WebKit (Safari-compatible). Closes the current browser session and reopens with the selected engine on the next browser_open call.
No output schemas documented. LLMs cannot predict return structure (e.g., browser_extract returns string, browser_open returns {title, url, text}). Forces agents to guess field names and types.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint). Risk classification exists in metadata but is not exposed to LLM. Agents cannot distinguish safe reads from destructive writes without reasoning about side effects.
Destructive operations lack confirmation/dry-run patterns. browser_cookies_clear and browser_close are irreversible but have no confirmation step. Agents can accidentally wipe state.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | <=2025-11-25 | v2 |
Execute JavaScript in the current browser page context and return the result. Use for reading DOM state, computing values, or triggering page-side logic.
Extract specific data from the current browser page using a CSS selector or by getting all visible text. Useful for scraping structured content.
Get the current URL and page title of the browser. Useful for verifying navigation or checking the current state.
Hover over an element on the current browser page. Useful for triggering dropdown menus, tooltips, and hover states.
Press a keyboard key in the browser. Use this to press Enter, Tab, Escape, arrow keys, etc. after typing or between steps.
Open a URL in the browser and optionally take a screenshot. Returns the page title, URL, and a text summary of visible content.
Reload (refresh) the current browser page.
Take a screenshot of the current browser page and send it to the user.
Scroll the current browser page up or down, or to a specific position.
Scroll a specific element into the visible viewport on the current browser page.
Select an option in a <select> dropdown on the current browser page.
Read items from localStorage or sessionStorage on the current page. Useful for reading auth tokens, preferences, and app state.
Type text into an input field on the current browser page. Can clear the field first. Works on SPAs like Google, Gmail, etc.
Wait for a CSS selector to appear on the page, or wait for navigation to complete. Use after clicking login buttons, form submissions, or navigating to a new page.
Error handling is generic. Catch blocks return 'Error: <message>' without recovery guidance. No distinction between retryable (timeout) vs user-fixable (invalid selector) vs fatal errors.
Parameter descriptions lack format constraints. 'selector' parameter accepts any string but should document CSS selector syntax. 'timeout_ms' lacks min/max bounds (should be 1 - 60000). Invites invalid LLM input.