# Manual de uso de la herramienta Browser Este manual explica que tools expone la herramienta browser, como usarlas y que puedes pedirle a OpenCode en la practica. ## Alcance actual - Browser: `Chromium` controlado por `Playwright` - Integracion: `MCP` por `stdio` - Modo por defecto: visible (`headless: false`) - Artefactos: capturas en `opencode-browser-tool/artifacts/` ## Esquema de respuesta estandar Todas las tools devuelven ahora un formato unificado. Respuesta OK: ```json { "ok": true, "tool": "browser_", "data": {}, "state": { "isOpen": true, "currentUrl": "https://..." } } ``` Respuesta con error: ```json { "ok": false, "tool": "browser_", "error": { "code": "TOOL_EXECUTION_ERROR", "message": "detalle del error" }, "state": { "isOpen": false, "currentUrl": null } } ``` ## Flujo recomendado de uso 1. Abrir sesion de navegador con `browser_open` 2. Navegar con `browser_navigate` 3. Interactuar con `browser_click`, `browser_type`, `browser_press`, `browser_scroll` 4. Esperar estados estables con `browser_wait` 5. Capturar evidencia con `browser_snapshot` 6. Inspeccionar estado dinamico con `browser_evaluate` 7. Cerrar sesion con `browser_close` Importante: todas las tools excepto `browser_open` y `browser_close` requieren sesion abierta. Si no hay sesion, devuelve error. ## Espera automatica nativa (comportamiento actual) La herramienta ya incorpora estabilizacion automatica despues de acciones clave. Que significa en la practica: - despues de `browser_navigate`, `browser_click`, `browser_type`, `browser_press`, `browser_scroll` y `browser_evaluate`, la herramienta intenta esperar estado estable por si sola - combina `domcontentloaded`, intento de `networkidle` y una ventana de "quietud" de actividad de red - si no logra estado estable, aplica salida segura por tiempo maximo para evitar bucles de espera infinita Resultado: - normalmente no necesitas pedir `wait` manual para casos comunes - `browser_wait` sigue disponible cuando quieras una condicion explicita (selector/texto/url/timeout) --- ## Tools disponibles ### `browser_help` Devuelve un resumen operativo de la herramienta: capacidades, defaults, notas y ejemplos. Cuando usarla: - al empezar una sesion nueva con un agente que no conoce la tool - para recordar comportamiento por defecto (modo visible, timeouts, auto-wait) Parametros: ninguno. Ejemplo: ```json {} ``` --- ### `browser_health` Devuelve estado operativo actual del runtime browser y artifacts recientes. Incluye: - estado de sesion (`isOpen`, `currentUrl`) - actividad de red interna (`inflight`, `lastActivityAgoMs`) - comportamiento activo (`verbose`, overlay, delay humano) - pasos recientes (`recentSteps`) para diagnostico rapido en vivo - lista de artifacts recientes (ruta, fecha, tamano) Parametros: - `limit` (number, opcional): cantidad maxima de artifacts a devolver (default `5`, max `20`) Ejemplo: ```json { "limit": 5 } ``` --- ### `browser_config` Permite leer o cambiar configuracion persistente de la herramienta (guardada en `config/browser-tool.config.json`). Parametros: - `action` (string, opcional): `get` o `set` (default `get`) - `browserDefaultKind` (string, opcional): `testing` o `system` - `browserSystemExecutablePath` (string, opcional): ruta del navegador del sistema (ej. `/usr/bin/google-chrome`) - `browserDefaultPersistentProfile` (boolean, opcional): si `true`, `browser_open` usa perfil persistente por defecto - `browserDefaultUserDataDir` (string, opcional): ruta de perfil persistente por defecto - `browserDefaultVerbose` (boolean, opcional): modo verbose por defecto (`true` recomendado para operacion) - `browserDefaultVerboseOverlay` (boolean, opcional): overlay visual de estado en navegador visible - `browserDefaultInteractionDelayMinMs` (number, opcional): minimo de delay humano en acciones interactivas - `browserDefaultInteractionDelayMaxMs` (number, opcional): maximo de delay humano en acciones interactivas - `reportDefaultSaveToFile` (boolean, opcional): default persistente de `browser_report.saveToFile` - `reportDefaultFormat` (string, opcional): `json`, `markdown`, `both` Ejemplo lectura: ```json { "action": "get" } ``` Ejemplo cambio persistente: ```json { "action": "set", "browserDefaultKind": "system", "browserSystemExecutablePath": "/usr/bin/google-chrome", "browserDefaultPersistentProfile": true, "browserDefaultUserDataDir": "/home/pancho/.chrome-perfil-google-real", "browserDefaultVerbose": true, "browserDefaultVerboseOverlay": true, "browserDefaultInteractionDelayMinMs": 1000, "browserDefaultInteractionDelayMaxMs": 3000, "reportDefaultSaveToFile": false, "reportDefaultFormat": "json" } ``` --- ### `browser_diagnostics` Devuelve eventos recientes de diagnostico capturados durante la sesion: - `console` (log, warn, error, etc.) - `pageerror` (errores JS no capturados) - `requestfailed` (peticiones de red fallidas) Parametros: - `limit` (number, opcional): maximo de eventos devueltos (default `20`, max `200`) Ejemplo: ```json { "limit": 20 } ``` --- ### `browser_diagnostics_clear` Limpia el buffer interno de diagnostico. Uso recomendado: antes de arrancar una prueba nueva para leer solo eventos de ese flujo. Parametros: ninguno. ```json {} ``` --- ### `browser_observe` Toma una "foto de estado" de la pagina durante el flujo y, opcionalmente, una captura. Uso recomendado: - cuando el flujo parece bloqueado - cuando no avanza tras una accion - antes de abortar una prueba para entender que esta viendo el navegador Parametros: - `screenshot` (boolean, opcional, default `true`) - `label` (string, opcional) Ejemplo: ```json { "screenshot": true, "label": "mid-flow-check" } ``` --- ### `browser_handle_consent` Intenta pulsar botones comunes de consentimiento. Parametros: - `action` (string, opcional): `reject` (default) o `accept` Ejemplo: ```json { "action": "reject" } ``` --- ### `browser_handle_human_check` Intenta resolver controles comunes de verificacion humana (incluyendo checkbox de reCAPTCHA cuando es clicable). Estrategia actual: - intenta clic en checkboxs dentro de iframes comunes de reCAPTCHA - intenta selectores de captcha tambien en pagina principal - usa fallback por coordenadas para controles detectados por texto Uso recomendado: - cuando aparece bloqueo tipo `sorry/index` - cuando el flujo queda detenido en "comprueba que eres humano" Parametros: ninguno. ```json {} ``` --- ### `browser_open` Abre una sesion de `Chromium`. Parametros: - `headless` (boolean, opcional): por defecto `false` - `startUrl` (string, opcional) - `width` (number, opcional, default `1440`) - `height` (number, opcional, default `900`) - `browserKind` (string, opcional): `testing` (Playwright managed) o `system` (browser del sistema) - `executablePath` (string, opcional): ruta binaria explicita del navegador - `persistentProfile` (boolean, opcional): activar perfil persistente - `userDataDir` (string, opcional): ruta del perfil persistente (requerido si `persistentProfile=true`) - `verbose` (boolean, opcional, default `true`): muestra estado paso a paso en respuestas - `verboseOverlay` (boolean, opcional, default `true`): muestra estado en overlay visual en navegador visible - `interactionDelayMinMs` (number, opcional, default `1000`) - `interactionDelayMaxMs` (number, opcional, default `3000`) - `recordVideo` (boolean, opcional, default `false`) - `recordTrace` (boolean, opcional, default `false`) - `recordLabel` (string, opcional, default `session`) Ejemplo: ```json { "headless": false, "startUrl": "http://localhost:3000", "width": 1440, "height": 900, "browserKind": "system", "persistentProfile": true, "userDataDir": "/home/pancho/.chrome-perfil-google-real", "verbose": true, "verboseOverlay": true, "interactionDelayMinMs": 1000, "interactionDelayMaxMs": 3000, "recordVideo": true, "recordTrace": true, "recordLabel": "case-123" } ``` Notas: - `recordVideo` sigue desactivado por defecto para evitar consumo innecesario. - si activas `recordVideo` o `recordTrace`, los artifacts se generan al cerrar sesion con `browser_close`. - con `verbose=true`, la tool muestra estado actual y aplica guardas de estabilidad antes de pasos sensibles. --- ### `browser_close` Cierra la sesion activa de navegador. Parametros: ninguno. Ejemplo: ```json {} ``` --- ### `browser_navigate` Navega la pagina activa a una URL. Parametros: - `url` (string, requerido) - `waitUntil` (string, opcional): `load`, `domcontentloaded`, `networkidle` (default `domcontentloaded`) Ejemplo: ```json { "url": "http://localhost:3000/login", "waitUntil": "domcontentloaded" } ``` --- ### `browser_click` Hace click sobre un selector CSS. Nota: antes del click intenta mover el puntero al centro del elemento para hacer la interaccion mas natural. Parametros: - `selector` (string, requerido) - `timeoutMs` (number, opcional, default `10000`) Ejemplo: ```json { "selector": "button[type='submit']", "timeoutMs": 10000 } ``` --- ### `browser_hover` Hace hover sobre un elemento por selector. Parametros: - `selector` (string, requerido) - `timeoutMs` (number, opcional, default `10000`) Ejemplo: ```json { "selector": ".menu-item-settings", "timeoutMs": 10000 } ``` --- ### `browser_type` Escribe texto en un elemento por selector. Nota: antes de escribir intenta mover puntero y enfocar el campo con click. Parametros: - `selector` (string, requerido) - `text` (string, requerido) - `clear` (boolean, opcional, default `true`) - `timeoutMs` (number, opcional, default `10000`) Ejemplo: ```json { "selector": "input[name='email']", "text": "usuario@dominio.com", "clear": true, "timeoutMs": 10000 } ``` --- ### `browser_select` Selecciona una opcion en un elemento `