---
title: "Automatización del navegador para agentes de IA con Browser Use CLI"
description: "Cómo conecté mi agente de IA a un navegador real con sesiones activas mediante Browser Use CLI y el Chrome DevTools Protocol, con compatibilidad con Brave."
date: "2026-03-21T00:00:00.000Z"
author: "Carlos Garavito"
tags: ["ai", "agents", "browser-automation", "openclaw", "tools"]
canonical_url: "https://cgaravito.dev/es/blog/browser-automation-ai-agents"
last_updated: "2026-03-21T00:00:00.000Z"
locale: "es"
---

Mi agente podía buscar en la web, leer artículos, ejecutar comandos y gestionar archivos, pero `web_fetch` dejó de ser útil cuando un sitio requería autenticación o interacción. X, LinkedIn y GitHub devolvían texto sin acceso a mi sesión activa, sus controles ni el estado visible de la página.

Quería que el agente usara mi sesión existente de Brave, hiciera clic y rellenara controles, y tomara capturas de pantalla. [Browser Use CLI](https://browser-use.com) está diseñado para consumo de LLM y me proporcionó esa interfaz sin obligar al agente a analizar una página llena de HTML.

## Una interfaz que un agente puede recorrer

La parte útil de Browser Use CLI es la salida de `browser-use state`. Convierte los elementos visibles de la página en índices numéricos, de modo que el modelo puede navegar sin HTML en bruto ni selectores CSS.

```
[0] <button> Follow
[1] <a href="/home"> Home
[2] <input placeholder="Search...">
[3] <div class="tweet-text"> Post content...
```

El agente puede inspeccionar ese estado, elegir un índice, actuar e inspeccionar el resultado. Browser Use también se ejecuta como un daemon persistente, por lo que el navegador permanece activo entre comandos y las operaciones tardan unos 50 ms sin iniciar Chrome de nuevo para cada acción.

La instalación requiere un solo comando.

```bash
curl -fsSL https://browser-use.com/cli/install.sh | bash
```

El instalador crea un entorno virtual de Python en `~/.browser-use-env/`, descarga Chromium mediante Playwright y coloca el binario `browser-use` en `~/.browser-use/`. Comprobé la instalación con:

```bash
browser-use --version
```

## Conectar Brave mediante CDP

Browser Use tiene un flag `--profile` para usar un perfil de Chrome existente, pero solo funciona con Chrome. Yo uso Brave, así que lo conecté mediante el Chrome DevTools Protocol. CDP es el protocolo que utilizan las herramientas de desarrollo del navegador, Playwright y Puppeteer, y Brave lo expone cuando se inicia con un puerto de depuración remota.

```bash
# Close Brave if it's open, then relaunch with CDP enabled
open -a "Brave Browser" --args --remote-debugging-port=9222
```

Después, Browser Use puede conectarse a ese navegador.

```bash
browser-use --cdp-url http://localhost:9222
```

Puse la secuencia de inicio en `brave-connect.sh` porque no quiero tener que recordarla cada vez.

```bash
#!/bin/bash
# Cleanly quit Brave
osascript -e 'quit app "Brave Browser"'
sleep 1

# Relaunch with CDP enabled
open -a "Brave Browser" --args \
  --remote-debugging-port=9222 \
  --no-first-run

# Wait for the port to be ready
echo "Waiting for Brave..."
until curl -s http://localhost:9222/json/version > /dev/null 2>&1; do
  sleep 0.5
done
echo "Brave ready on CDP port 9222"
```

## Probar la sesión autenticada

Conecté el agente, abrí X y tomé una captura de pantalla.

```bash
browser-use --cdp-url http://localhost:9222
browser-use open https://x.com
browser-use screenshot
```

La sesión activa se abrió directamente en mi feed. `browser-use state` mostró publicaciones de Brad Groux sobre OpenClaw Foundation, la compatibilidad de Warp con el protocolo de teclado kitty y el nuevo CLI de Browserbase. Después abrí una publicación de @anibal sobre la inyección dinámica de skills en Claude Code.

```bash
browser-use state
```

El bucle de navegación se mantuvo pequeño y explícito.

```bash
# 1. Open a page
browser-use open https://x.com/@anibal/status/...

# 2. Get page state (indexed elements)
browser-use state

# 3. Click something if needed
browser-use click 4

# 4. Verify the result
browser-use screenshot
```

Para mí, ese bucle es más importante que una gran abstracción del navegador. El modelo recibe un estado compacto, ejecuta una acción y verifica qué ha cambiado.

## Mantener CDP temporal

En esta configuración, el puerto 9222 solo está disponible en localhost. El DNS rebinding aún puede permitir que una página maliciosa apunte a un puerto de depuración local e intente controlar el navegador.

Trato CDP como un acceso temporal. Lo habilito durante una sesión de trabajo activa, inicio el daemon de Browser Use cuando lo necesito y deshabilito CDP al terminar. Sería más restrictivo con datos sensibles o dentro de un entorno corporativo, porque el tradeoff cambia según la sesión del navegador.

## Convertir el flujo de trabajo en una skill de OpenClaw

Cuando el flujo del navegador funcionó, lo envolví en una skill de OpenClaw con un punto de entrada breve y una referencia de comandos independiente.

```
~/.openclaw/workspace/skills/browser-use/
├── SKILL.md              # Concise instructions for the agent
├── references/
│   └── commands.md       # Full reference for all commands
└── scripts/
    └── brave-connect.sh  # Helper to connect Brave via CDP
```

`SKILL.md` contiene el flujo habitual: conectar mediante CDP, abrir una URL, inspeccionar `state`, actuar y verificar. El catálogo de comandos más extenso se mantiene en `references/commands.md`, así que el agente solo lo carga cuando la tarea necesita una operación poco habitual. Esta revelación progresiva mantiene breves las instrucciones rutinarias y conserva la referencia completa para los casos que la necesitan.

El resultado es una herramienta de navegador específica que funciona con sesiones autenticadas de X, LinkedIn, GitHub y Gmail. Puede navegar, hacer clic, rellenar formularios y tomar capturas de pantalla, mientras el límite de seguridad permanece visible cada vez que inicio Brave con CDP habilitado.
