Octoweb ya tiene casa propia — y sigue corriendo con tus modelos, no con los nuestros
Hace tres semanas presentamos Octoweb — el navegador WebKit centrado en el teclado en el que llevábamos viviendo discretamente desde marzo. La respuesta fue mejor de lo que esperábamos, y llegó con una pregunta pegada, formulada en media docena de tonos distintos:
O sea que solo funciona con su nube, ¿no?
Es una suposición razonable. La barra lateral corre sobre Octomind, que también es el nombre de nuestra nube de pago. El artículo decía «instala Octomind e inicia sesión», y cualquier lector sensato concluye que el navegador es un embudo — que cambiar de navegador significa alquilarnos un modelo.
No lo es, y nunca lo fue. Que la respuesta no fuera obvia es un fallo de documentación que asumimos, empezando por la URL: la página del producto vivía en octomind.run/product/octoweb, que dice esto es una función de esa cosa que pagas antes de que leas una sola palabra.
Así que arreglamos la URL, y después arreglamos la explicación.
Octoweb ahora vive en octoweb.xyz. Gratis, Apache-2.0, macOS 13+, sin cuenta. Y el navegador no ha llamado a un proveedor de modelos en toda su vida — no tiene el código para hacerlo.
La nueva casa
- TABAtajos de teclado — todas las combinacionesoctoweb.xyz/shortcuts⌘1
- TABServidor MCP — 29 herramientas que tu agente puede llamaroctoweb.xyz/mcp⌘2
- HISTORIALQué guarda el navegador y qué envíaoctoweb.xyz/privacy⌘3
Esa es la paleta de comandos — ⌘⇧P — haciendo coincidencia difusa entre pestañas abiertas e historial, que es como se llega a cualquier parte en Octoweb. También es un buen adelanto del sitio, porque el sitio es sobre todo material de referencia y no marketing:
- /shortcuts — las 48 combinaciones en seis grupos, incluidas las que solo existen dentro de la paleta y del cuadro de prompt de la IA.
- /mcp — las 29 herramientas MCP una por una, agrupadas por lo que hacen, con configuración lista para copiar y pegar para Claude Code, Claude Desktop y Cursor.
- /privacy — dónde aterriza cada archivo en tu disco, qué escucha en loopback y una nota honesta: el sitio web usa Google Analytics mientras que el navegador no envía telemetría de ningún tipo.
- /blog — artículos cortos, con forma de producto. Este se queda en muvon.io; allí es donde vivirán las notas de versión.
Es un sitio estático de SvelteKit sobre Cloudflare, prerenderizado, sin peticiones desde el cliente — el mismo stack que la página que estás leyendo. Nos llevó una tarde. Deberíamos haberlo hecho en marzo.
La respuesta de verdad: ¿de quién es el modelo?
Esta es la parte que merecía un párrafo claro hace tres semanas.
La barra lateral de Octoweb no es un cliente de chat. Cuando pulsas ⌘⇧A, el navegador lanza un proceso hijo — octomind acp octoweb:assistant, aislado — y habla con él por el Agent Client Protocol. Todas las llamadas a modelos del sistema las hace ese proceso. Busca en las 36.000 líneas de Rust del navegador una llamada HTTP a un proveedor de modelos y volverás con las manos vacías, porque no existe. El navegador sabe renderizar una conversación. No sabe qué es OpenAI.
Eso importa porque mueve toda la pregunta de «qué modelo» un proceso hacia la izquierda, a la configuración de Octomind — donde es una sola cadena de texto:
[model]
name = "octohub:auto" # Octomind Cloud, one key, we route it
# name = "anthropic:claude-opus-5"
# name = "openrouter:qwen/qwen3-coder"
# name = "local:qwen3-coder-30b" # your box, your GPU, your electricity
Los modelos siempre son provider:model — un nombre suelto se rechaza en lugar de adivinarse. Detrás de esos prefijos, octolib — la capa de proveedores que comparten todas las herramientas de Muvon — resuelve hoy 28 de ellos: openrouter, openai, anthropic, google-vertex, google-studio, groq, cerebras, deepseek, fireworks, together, xai, moonshot, minimax, nvidia, amazon, cloudflare, zai, alibaba y el resto.
Este artículo va en realidad sobre dos de esos prefijos:
local:apunta a cualquier servidor compatible con OpenAI, por defecto ahttp://localhost:11434/v1/chat/completions. Eso es Ollama sin tocar nada; defineLOCAL_API_URLy es LM Studio en el 1234, LocalAI en el 8080 o la máquina con vLLM que tienes debajo del escritorio. Nada sale del equipo.cli:maneja una CLI de agente que ya tienes instalada —codex,claude,cursor,gemini— como si fuera un endpoint de modelo. Si ya estás pagando por alguna de ellas, la barra lateral puede usarla y no sumas una segunda factura.
Y las claves nunca van dentro del archivo de configuración. octomind config --api-key se niega a guardar una — las credenciales se leen del entorno, luego de un .env de usuario y luego de un .env del proyecto. Tu clave de Anthropic vive donde viven tus otras claves.
Dónde encaja Octomind Cloud: es el camino fácil, no el obligatorio. octomind login es un flujo de código de dispositivo, como gh auth login. Escribe una sola credencial — OCTOHUB_API_KEY — y el modelo por defecto octohub:auto enruta cada llamada según su propósito (principal, supervisor, compresión) al modelo adecuado de nuestro lado. Una clave en vez de seis, un solo tope de gasto que puedes vigilar y un plan gratuito para empezar. Nos parece un buen trato, por eso es lo que viene por defecto. También basta con cambiar nueve caracteres en un archivo TOML para que deje de ser tu configuración — y la franja de cuenta de la barra lateral es un aviso que se descarta, no una barrera.
La etiqueta de la cabecera de la barra lateral es editable, así que la misma ventana puede estar hablando con octoweb:assistant un minuto y con tu propio agente developer:rust al siguiente — y desde la 0.14.0 ese campo se autocompleta con las etiquetas que tu Octomind local conoce de verdad, en lugar de que las escribas a ciegas.
Tres semanas, cuatro versiones
Desde el artículo de presentación, Octoweb publicó de la 0.11.0 a la 0.14.0 — 62 commits. Dos de ellos cambiaron cómo se siente usarlo.
Workspaces (⌘⇧O). Perfiles aislados, y aislados en serio: cada workspace tiene sus propias pestañas, su propio historial, sus propias sesiones de IA, su propio orden de uso reciente, sus propias ranuras de acceso rápido y su propio WKWebsiteDataStore — así que las cookies, el localStorage y la caché nunca se cruzan. Dos cuentas en el mismo sitio, con la sesión iniciada a la vez, sin el teatro del modo incógnito. Esta es la función que no sabíamos que necesitábamos hasta el día en que dejamos de necesitar un segundo navegador para el proyecto del cliente.
- ⌘1personal14 pestañas
- ⌘2client-acme6 pestañas▶ meet.google.com
- ⌘3agent-scratch2 pestañasMCP
MCP ahora se enruta por workspace. El único servidor en localhost:3434/mcp lee un token X-Octoweb-Workspace y actúa solo dentro de ese perfil. Lo que significa que un agente puede manejar un workspace en segundo plano — con la sesión iniciada en una cuenta de pruebas, sobre sus propias cookies — mientras tú sigues trabajando en el tuyo, sin que pueda colarse en tu sesión por accidente. El manifiesto de capacidades va más lejos y se niega a exponer el servidor cuando no hay token, en vez de caer por defecto en el workspace que tengas en pantalla.
El resto, en corto, y todo ello en tus manos y no en las nuestras:
- Entrada nativa confiable. Los clics y las pulsaciones que llegan por MCP ahora son
NSEventreales de AppKit entregados alWKWebViewde la pestaña — así que las páginas venisTrusted=true, un gesto de usuario genuino,:hoverfuncionando y las acciones nativas por defecto. Funciona en pestañas de segundo plano ocultas sin robarte el foco. Los eventos DOM sintéticos nunca pudieron con las cuatro cosas a la vez. - Cada acción responde con lo que cambió. Cada llamada a herramienta devuelve un resumen de efecto de una línea — navegación, cambio de URL en una SPA, texto nuevo en pantalla, diálogos, actividad de red, movimientos del foco — o dice «sin cambios observables» en voz alta. El agente deja de quemar un turno releyendo la página para averiguar si su clic surtió efecto. Por el camino, los parámetros sensibles de la URL se eliminan de la actividad de red que se reporta.
- Ya hay descargas. Un parche en tiempo de ejecución hace que WebKit respete
Content-Disposition: attachmenten el frame principal y en los subframes — que es lo que usa Google Drive — y el nombre del archivo resultante aparece en el resumen de efecto aunque la página no haya dicho nada. browser_dismiss_overlay. Se deshace de los banners de cookies y de consentimiento, y prefiere Rechazar — no va a aceptar en tu nombre.- A2UI v1.0. El agente puede renderizar una superficie interactiva de verdad en la barra lateral — tarjetas, formularios, selectores, deslizadores, modales — con enlace de datos y validación, y esperar hasta media hora a que hagas clic en algo. Las acciones con consecuencias deberían pasar por ahí: preguntar y después actuar.
- Pestañas con medios en vivo. El selector de workspaces muestra qué pestañas están reproduciendo audio o video o tienen el micrófono abierto — así que la reunión que dejaste corriendo en otro perfil se puede encontrar, en lugar de perseguirte.
Dos cosas que contamos mal en agosto
Norma de la casa: cuando el artículo anterior se equivocó, el siguiente lo dice.
Los atajos globales no pasan por CGEventTap. Escribimos que sí; el código dejó de usarlo allá por mayo. CGEventTap exige el permiso de Accesibilidad de macOS, y pedirle a algo con forma de navegador un acceso de nivel keylogger es un mal trato a cambio de una función que nadie pidió. En su lugar, Octoweb usa un monitor local de NSEvent de AppKit — cero permisos y con un alcance honesto: solo ve las teclas cuando Octoweb está en primer plano. «Globales» era la palabra equivocada para el diseño correcto.
Las passkeys no están. El artículo de agosto listaba WebAuthn entre los fundamentos ya publicados. El commit que las añadía se revirtió en mayo y no lo detectamos antes de publicar. No están en la 0.14.0.
Dos correcciones menores ya que estamos: el servidor MCP tiene 29 herramientas, no 26 — browser_fill_form, browser_dismiss_overlay, browser_get_playing_tabs y render_ui llegaron después. Y las «unas 25.000 líneas» son ahora 35.972.
Consíguelo
brew install --cask muvon/tap/octoweb
macOS 13 o posterior, Apple Silicon o Intel, sin cuenta. O compílalo tú mismo, que solo necesita una toolchain de Rust y cosa de un minuto:
git clone https://github.com/muvon/octoweb
cd octoweb
./build.sh --dev
open dist/Octoweb.app
Sin nada de IA configurado, Octoweb es un navegador: paleta, ranuras, workspaces, búsqueda en página, bloqueo de contenido, hibernación de pestañas. La barra lateral quiere tener Octomind instalado al lado, y a partir de ahí el modelo es una decisión de una línea — octomind login para nuestra nube, o una clave exportada y una cadena provider:model para cualquier otra cosa. Nosotros usamos las dos, en máquinas distintas, según cuál sea el trabajo y cómo esté la red.
Todo es Apache-2.0: el navegador, el runtime, la capa de proveedores. Si lo ejecutas contra un modelo local y algo va más lento o más torpe de lo que debería, abre un issue — ese camino recibe menos pruebas que el de la nube, y lo único que lo arregla es que nos lo cuentes.
— Don
Octoweb es código abierto bajo Apache-2.0, desarrollado por Muvon Un Limited. Ahora vive en octoweb.xyz, corre sobre Octomind y funciona con el modelo al que lo apuntes. GitHub — issues y pull requests bienvenidos.



