Skip to main content
Glama

strawmanus

Un agente de control de navegador que fusiona la capa de acciones de Manus con la capa de sesión, selector y reutilización de Strawberry.

Manus tiene las mejores manos: una API de navegador plana de 12 herramientas, respaldo por coordenadas cuando falla la detección de elementos, una vía de escape a la consola JS, percepción priorizando markdown y un bucle estricto de una herramienta por iteración. Strawberry (Dendrite Systems) tiene el mejor cuerpo y memoria: se ejecuta en tu navegador real con sesión iniciada, resuelve elementos a partir de lenguaje natural y almacena en caché el resultado para que se auto-repare cuando el sitio cambia, guarda tareas exitosas como habilidades reproducibles y pregunta antes de hacer cualquier cosa irreversible.

Ninguno funciona por sí solo. Manus vuelve a pagar el costo completo del modelo en cada repetición de una tarea y, al ejecutarse en un sandbox Linux desechable, estructuralmente no puede superar un muro de inicio de sesión. Strawberry es cerrado y no expone primitivas para programar contra él. strawmanus es la combinación: el espacio de acciones de Manus, ejecutado dentro de tu propio Chrome, con cada resolución de elementos almacenada en caché.


Instalar

pip install -r requirements.txt && playwright install chromium

observe funciona sin clave de API. Todo lo que depende del modelo necesita una:

export ANTHROPIC_API_KEY=sk-ant-...

Luego verifica el entorno:

python -m strawmanus doctor

Related MCP server: agent-browser-mcp

Uso

# See exactly what the agent sees — no API key, no model call
python -m strawmanus observe --url https://github.com/trending

# Run a task
python -m strawmanus run "top 5 trending TypeScript repos today, 2 sources per fact" --expect 5

# Log in once by hand; later headless runs inherit the session
python -m strawmanus auth --url linkedin.com

# Save a successful run as a skill, then replay it with new arguments
python -m strawmanus run "search for Acme Corp" --save-skill find-co --param company="Acme Corp"
python -m strawmanus replay find-co --arg company="Globex Inc"

# Fan subtasks across tabs (they share the logged-in browser)
python -m strawmanus companions "price Linear" "price ClickUp" "price Asana"

# Score against the seat-free Strawberry benchmarks
python -m strawmanus bench --tasks B9,B12 --judge --csv scores.csv

Banderas globales: --profile {cloned,real,fresh,attach} · --headless · --max-steps N · --auto-approve · --allow DOMINIO · --parallel N · --cdp URL.

El estado vive en ~/.strawmanus/: sm.db (caché de selectores, memoria, registro de ejecuciones), skills/, runs/<marca>-<slug>/{report.md,trace.json,guard.json}, profile/.


Cómo funciona

1. La percepción son tres capas en una sola carga

[page] url=https://github.com/trending | title='Trending repositories on GitHub today · GitHub' | viewport 1/3 | tabs=1

[interactive] (viewport only; use index, or coordinate_x/coordinate_y for anything missing)
  0[:]<a>Homepage</a>
  1[:]<button>Platform</button>
  ...
  52[:]<a>obra / superpowers</a>
  53[:]<a>275,441</a>
  60[:]<a>You must be signed in to star a repository</a>

[markdown] (whole page, links/images stripped — if this answers the question, do not scroll)
# Trending
## RyanCodrai / turbovec
A vector index built on TurboQuant, written in Rust with Python bindings
348 stars today
...

Los elementos interactivos son solo el viewport, en el formato exacto de Manus index[:]<etiqueta>texto</etiqueta>, con prueba de impacto mediante elementFromPoint para descartar controles ocluidos. El markdown cubre todo el documento, incluido lo que está debajo del pliegue — que es la verdadera palanca de costo, porque la mayoría de las preguntas de solo lectura se responden sin un solo desplazamiento. Las capturas de pantalla son opcionales, para cuando el DOM es genuinamente ambiguo.

Los campos de contraseña, OTP y tarjeta se indexan para poder rellenarlos, pero su texto y valor nunca entran en el contexto del modelo:

  4[:]<input type=password><redacted secret field></input>

2. Las 12 herramientas de Manus, textualmente — más 5

browser_view · browser_navigate · browser_restart · browser_click · browser_input · browser_move_mouse · browser_press_key · browser_select_option · browser_scroll_up · browser_scroll_down · browser_console_exec · browser_console_view

Los nombres se mantienen exactamente porque los modelos ya generalizan sobre ellos, y las reglas de comportamiento publicadas de Manus se transfieren directamente. Añadidas encima:

Herramienta

Por qué

browser_find(descripción) → índice

Selector en lenguaje natural, primero caché

browser_wait_for(descripción)

Esperas semánticas en lugar de bucles de sueño

browser_extract(descripción, esquema)

Extracción tipada que archiva automáticamente su URL de origen

browser_tabs(acción, destino)

listar / abrir / cambiar / cerrar

browser_takeover(motivo)

2FA, captcha, pago — devuelve el teclado

El clic escala en lugar de llegar a un callejón sin salida: índice → coordenadas del bbox de la instantánea → browser_console_execbrowser_takeover. Tres fallos consecutivos en una página inyectan la escalera de escalada en el bucle.

3. La caché de selectores es la mayor victoria

(dominio, descripción normalizada){selector, huella{etiqueta, rol, hash_texto}, aciertos, fallos} en SQLite.

Orden de resolución: acierto de caché → verificar la huella → usarlo, con cero llamadas al modelo. En desajuste o fallo, el modelo elige un índice del listado de elementos y la caché se reescribe — el auto-reparado de Dendrite, del que Manus no tiene equivalente. Una habilidad reproducida en una página sana cuesta ninguna llamada al modelo; strawmanus cache muestra lo que se ha acumulado.

4. Navegador real primero

El valor predeterminado es un perfil de Chrome persistente que strawmanus posee — cookies reales, muros de inicio de sesión ya resueltos, sin credenciales almacenadas en ningún lugar. --profile real usa tu perfil real (Chrome debe estar cerrado), --profile attach se conecta a un Chrome que iniciaste tú mismo en --remote-debugging-port=9222, --profile fresh da un contexto limpio para benchmarks reproducibles. strawmanus auth --url <sitio> es el patrón de Dendrite: inicias sesión manualmente una vez, el estado de almacenamiento se guarda para ejecuciones headless posteriores.

5. Nada irreversible ocurre en silencio

Cada acción se clasifica como lectura / escritura suave / irreversible antes del envío. Enviar, enviar formulario, pagar, eliminar, publicar, aplicar, suscribirse, transferir, fusionar, empujar — y Enter presionado en un campo de redacción — se mantienen para confirmación con una vista previa del objetivo y la carga:

  ⚠  irreversible action held for confirmation
     what: click 'Send invoice' on x.com
      why: click target text contains 'send'
     approve? [y/N]

--auto-approve solo se aplica a dominios pasados con --allow. Las acciones retenidas se listan en el informe bajo "Retenidas para tu aprobación (no realizadas)", de modo que un paso bloqueado sea visible en lugar de faltar silenciosamente. Cada decisión se escribe en guard.json.

6. Un hecho sin fuente no puede imprimirse

El estándar de evaluación de Strawberry se aplica en tiempo de ejecución en lugar de calificarse después. Los hechos entran en un libro mayor con la URL de la que realmente se leyeron; una página de resultados de motor de búsqueda se rechaza como fuente y se le dice al modelo que abra la página real. La confianza es mecánica — Alta (2+ fuentes oficiales), Media (1), Baja (inferida) — y report.render() lanza en lugar de emitir una afirmación sin fuente. Los informes cierran con una línea de estado fija, bloqueadores, telemetría y la autonomía autoevaluada del agente:

**Status:** Complete | **Entities Found:** 5/5 | **Duration:** 6.2 min

7. Habilidades y acompañantes

Un rastro exitoso se destila en una habilidad parametrizada: se eliminan las herramientas de ruido, los valores de argumentos literales se reemplazan con {{param}}, el texto de los elementos se mantiene para que cada paso pueda reubicarse en la reproducción. Los acompañantes reparten subtareas entre pestañas detrás de un semáforo, cada una con su propio flujo de eventos, compartiendo el único navegador con sesión iniciada.


Entrega el navegador directamente a Claude

Todo lo anterior impulsa al agente desde la CLI. serve-mcp lo invierte: el navegador se convierte en una herramienta que Claude sostiene en conversación, un Chrome persistente que permanece abierto entre turnos, manejado llamada a llamada de herramienta con el razonamiento ocurriendo en el chat en lugar de en un bucle con guion.

claude mcp add strawmanus -- python -m strawmanus serve-mcp

JSON-RPC 2.0 hecho a mano sobre stdio, sin dependencia adicional. Las 17 herramientas de navegador más 9 herramientas de trading. Chrome se inicia en la primera llamada de herramienta, no en el registro, por lo que agregar el servidor no abre una ventana. browser_takeover regresa inmediatamente en lugar de bloquear en input() — stdin es el canal de protocolo aquí, por lo que bloquear bloquearía el servidor; en su lugar, el modelo se detiene y te pregunta en conversación.

Las herramientas de trading apuntan a Olymp Trade y vienen con una capa aritmética, un diario que registra el razonamiento detrás de cada operación, y límites de riesgo aplicados en código por debajo de la capa de razonamiento, por lo que una negativa es definitiva. La suposición de diseño es que "sin ventaja" es la respuesta probable, y la puerta de evidencia de demostración existe para que esa respuesta sea alcanzable: el dinero real requiere el límite inferior del intervalo de Wilson del 95% para superar el punto de equilibrio, no la estimación puntual. Un registro de demostración de 120 operaciones con una tasa de victorias del 61.7%, subiendo 146.80, aún informa edge proven NO.

TRADING.md tiene el panorama completo, incluidos los Términos de Servicio y los riesgos estructurales que deberías leer antes de apuntar esto a dinero real.


Benchmarks

bench/tasks.json lleva las 9 tareas de la especificación B1–B12 publicada de Strawberry que no necesitan asiento de pago (B6–B8 quieren acceso a LinkedIn Sales Navigator / CRM / ATS), puntuadas según su rúbrica — Precisión de Datos 35, Calidad de Fuente 25, Completitud 25, Insight 10, Velocidad 5 — menos una tabla de penalizaciones encabezada por −20 por punto de datos inventado.

Se ejecutan dos pasadas por benchmark. La pasada mecánica no necesita modelo y detecta lo que realmente sale mal: hechos sin fuente, hechos con una sola fuente, déficits de entidades, excesos contra la estimación de tiempo, lenguaje numérico evasivo. La pasada --judge luego califica con una llamada de modelo separada que solo ve el markdown emitido — el agente nunca califica su propia tarea.

Pruebas

python tests/test_core.py    # 33 offline: no browser, no network, no API key
python tests/test_live.py    # 6 end-to-end: real headless Chrome, scripted stub model

La suite en vivo ejecuta toda la pila contra un DOM real con el modelo reemplazado por un guion, que es lo que hace que los invariantes sean comprobables sin clave: el JS de instantánea contra HTML real, el guardián que rechaza Send invoice mientras permite Show details (afirmado en el estado propio de la página, no en el valor de retorno), la caché pasando de frío a cálido con el conteo de llamadas al modelo permaneciendo plano, una llamada de herramienta por iteración, una fuente de fragmento rechazada e informada, y una habilidad reproducida con un nuevo argumento.

Diseño

strawmanus/
  cli.py  config.py  loop.py  llm.py
  prompts/system.md          # agent loop, browser, information, safety, deliverable rules
  browser/
    session.py   # CDP attach / persistent profile / fresh context, tabs, storage state
    observe.py   # the three-layer observation
    actions.py   # Manus's 12 + 5, on Playwright
    selectors.py # NL selector → cache → fingerprint verify → self-heal
    guard.py     # risk classifier, confirm gate, secret redaction
  memory/
    store.py     # SQLite: prefs, per-domain quirks, run log
    skills.py    # trace → parameterized skill; replay with relocation
  research/
    sourcing.py  # citation ledger
    report.py    # the deliverable contract
  bench/
    tasks.json  judge.py

Aún no construido

Disparadores (activar una habilidad desde una etiqueta de Gmail o un PR de GitHub), conectores MCP y las herramientas de archivos de Manus están diseñados pero no implementados. El bucle impulsado por modelo se ha ejercitado de extremo a extremo contra un stub con guion, aún no contra una clave de API en vivo.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Transforms Chrome browser into an AI-controlled automation tool that allows AI assistants like Claude to access browser functionality, enabling complex automation, content analysis, and semantic search while preserving your existing browser environment.
    MIT
  • A
    license
    B
    quality
    F
    maintenance
    Enables AI agents to directly control your real Chrome browser with full context including login sessions, cookies, and open tabs. It provides tools for page scanning, JavaScript execution, CDP control, screenshots, and physical mouse/keyboard input for authentic browser automation.
    20
    241
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Enables controlling a real Chrome browser from MCP hosts like Claude, with extension-based or CDP fallback, supporting tabs, navigation, interaction, and page reading tools.
    33
    40
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables browser automation through the Claude Chrome Extension, allowing agents to navigate websites, fill forms, take screenshots, and debug web apps via standard MCP protocols.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/painbaba/strawmanus'

If you have feedback or need assistance with the MCP directory API, please join our Discord server