name: hermes-profile-browser-isolation description: 多个 AI 助手同时干活时,浏览器会互相抢占:弹窗抢焦点、任务互相打断、你正在用的 Chrome/Edge 被顶掉——你连自己的网页都点不动了。
这套给每个助手(profile)配一套独立的持久浏览器实例:固定调试端口 + 固定数据目录,默认无头运行不抢屏,各自保存登录态,不用反复扫码。你照常用自己的浏览器,完全不受打扰。
- 一键配置 / 一键审计 / 一键回收,三条命令搞定
- 纯本地脚本,零 token 消耗
- 跨平台:Windows / macOS / Linux 通用
- 输入:要并行的助手数量与名字
- 输出:每个助手一套独立浏览器环境 + 冲突自检报告
适用:多智能体并行干活、需要各自保存不同账号登录态、共享一台电脑但互不干扰。
触发词:浏览器隔离、多智能体并行、不抢屏、无头浏览器、CDP、调试端口、独立 profile、登录态保存、多账号同时登录、AI 抢鼠标。 version: 1.1.0 author: 九品锦锂e license: MIT slug: hermes-profile-browser-isolation displayName: 多个AI同时上网不抢屏·独立浏览器隔离与登录态保存 summary: 给每个 AI 助手/智能体配一套独立持久浏览器:固定端口+固定数据目录、默认无头不抢屏,登录态各自保存不用反复扫码。 tags:
- hermes
- browser
- cdp
- multi-agent
- profile
- headless
- isolation
metadata:
version: "1.1.0"
hermes:
tags:
- hermes
- browser
- cdp
- multi-agent
- profile
- headless
- isolation category: dev-programming
Aislamiento de navegadores multi-perfil (sin robo de foco)
En una frase: permite que múltiples perfiles (profiles) o miembros AI dentro de un mismo Hermes utilicen cada uno su propio navegador independiente, sin competir, sin ventanas emergentes que roben el foco y sin interrumpir tu Chrome o Edge personal.
Seguro que te ha pasado
- Tienes dos asistentes AI abiertos, y en cuanto el segundo empieza a trabajar te aparece una ventana de Chrome tapando la pantalla, el ratón se te va.
- Los dos asistentes comparten el mismo navegador: el A está rellenando un formulario, el B navega a otra página y se lleva la sesión por delante. Las dos tareas fallan.
- El navegador temporal que se lanza no se cierra al terminar: en
%TEMP%se acumulan carpetasagent-browser-chrome-xxxx, ocupando varios GB de memoria. - Quieres mantener la sesión iniciada (por ejemplo, en un panel de administración), pero cada vez es una instancia nueva y tienes que volver a escanear el código QR.
- Quieres que la AI y tú compartáis el mismo navegador para ahorrar memoria, pero te da miedo que husmee en tus pestañas, haga clics accidentales o te eche de la sesión.
La causa raíz no es compleja: cuando varios perfiles no tienen una instancia fija de navegador, Hermes crea una temporal bajo demanda, y aparecen los problemas de "puerto ocupado, robo de foco, acumulación de basura, pérdida de sesión".
Qué consigues al instalarlo
| Antes | Después |
|---|---|
| Varios perfiles compiten por el mismo navegador | Cada perfil tiene una instancia independiente (puerto fijo + --user-data-dir fijo) |
| Al trabajar, aparece una ventana que te roba el ratón/foco | Modo headless por defecto, ventanas visibles = 0, tú ni te enteras |
| Tienes que iniciar sesión cada vez | La sesión se guarda en el directorio de datos del perfil, inicias una vez y se reutiliza |
| Las instancias temporales se acumulan y devoran memoria | Todo queda registrado; con stop all liberas todo de golpe; los directorios huérfanos se limpian automáticamente |
| Cuando hay problemas, tienes que adivinar | audit te lista en un comando el puerto, PID, número de ventanas visibles y memoria de cada instancia |
Métrica real (en una máquina de producción con 5 perfiles en el mismo Hermes):
- Antes vs. después de limpiar: 203 procesos / 8.5 GB → 71 procesos / 2.5 GB, de los cuales las instancias de los agentes AI solo ocupaban 38 procesos / 722 MB.
- Las 4 instancias de miembros tenían ventanas visibles = 0 y las sesiones se mantuvieron intactas.
Por qué por defecto no roba el foco (no es por suerte)
En el código fuente de Hermes, browser.headed por defecto es False. El comentario oficial lo deja claro:
"Headless by default (a focus-stealing window defeats a background capability)"
Es decir: "una ventana visible que robe el foco destruye la capacidad de ejecutarse en segundo plano" es una decisión de diseño oficial. Lo que hace este skill es fijar esa decisión y evitar que se revierta: asigna a cada perfil un endpoint CDP fijo, y añade una compuerta de auto-diagnóstico diario que, si detecta que alguna instancia ha generado ventanas visibles, la reinicia automáticamente en modo headless.
Instalación: tres pasos, copiar y pegar
Paso 1 · Instalar dependencia (solo una)
pip install psutil
Paso 2 · Instalar el skill en Hermes
Opción A (con SkillHub CLI):
skillhub install hermes-profile-browser-isolation --namespace user_2a1415c1 --dir <tu_directorio_de_skills_Hermes>
Opción B (manual): Copia toda la carpeta del skill a tu directorio de skills de Hermes, por ejemplo:
| Plataforma | Directorio de skills |
|---|---|
| Windows | %LOCALAPPDATA%\hermes\skills\devops\ |
| macOS / Linux | ~/.local/share/hermes/skills/devops/ |
Paso 3 · Configurar las instancias (un solo comando)
cd <directorio_del_skill>/hermes-profile-browser-isolation/scripts
python hermes_browser_provision.py discover # Primero mira cómo planea asignar (no modifica nada)
python hermes_browser_provision.py apply # Escribe en los config.yaml de cada perfil + lanza las instancias
python hermes_browser_audit.py # Verifica: puerto / PID / ventanas visibles de cada instancia
discover detecta automáticamente todos los perfiles Hermes de tu máquina y asigna puertos que no entren en conflicto (evita tanto los puertos ya declarados en la configuración como los que ya están siendo escuchados en el sistema). Así, funciona directamente si cambias de máquina, si tienes 3 perfiles o 8, sin necesidad de modificar el script.
Comandos diarios
python hermes_browser_provision.py status # Ver quién está corriendo y cuánta memoria ocupa
python hermes_browser_provision.py stop all # Parar todo, liberar memoria al instante (para reiniciar: start all, tarda ~2 segundos)
python hermes_browser_audit.py # Chequeo: reporta qué instancias tienen ventanas visibles (robo de foco)
Si quieres que se gestione solo, añade estas dos tareas programadas:
- Cada 30 minutos:
provision.py apply(comprueba que las instancias sigan vivas, levanta las caídas, limpia directorios huérfanos de%TEMP%) - Una vez al día:
audit.py --enforce-headless(si encuentra ventanas visibles, las corrige automáticamente a headless)
Verificación realizada (no es un script escrito a la ligera)
| Elemento probado | Resultado |
|---|---|
Tres formatos de config.yaml | Si ya tiene sección browser: se modifica (preservando sangría y comentarios); si no, se añade; si ya tiene cdp_url, se reemplaza in situ manteniendo el puerto ✅ |
| Asignación de puertos | Evita automáticamente puertos ya declarados y puertos reales en uso en la máquina ✅ |
| Modo dry-run | No toca ningún archivo (el hash antes/después coincide) ✅ |
| Lanzamiento real de instancias | Configura múltiples perfiles de una vez y las instancias se levantan correctamente ✅ |
| Fiabilidad del auditor (clave) | Forzamos una instancia a modo con cabeza → inmediatamente reporta "ventana visible" con PID + título → --enforce-headless la corrige a headless automáticamente ✅ |
Se ha realizado una prueba inversa "hazlo mal a propósito para ver si lo detecta": un detector que siempre dice OK no sirve de nada.
Preguntas frecuentes
- ¿
auditreporta una instancia que no puede eliminar la ventana visible? Ejecutaaudit.py --enforce-headlesspara que la reinicie en modo headless por puerto; si ocurre repetidamente, comprueba si hay otro programa (no Hermes) usando el mismo puerto. - ¿Quieres que un perfil concreto conserve ventanas visibles (por ejemplo, para verlo operar)? En su
config.yaml, ponbrowser.headed: truey exclúyelo de la lista de perfiles "de fondo" que audita el sistema. - ¿En Windows aparece un mensaje de que no hay API de ventanas? Si falta
pywin32, el script degrada automáticamente a detección por argumentos de línea de comandos (la funcionalidad no se interrumpe, solo la detección es menos precisa). Instalapywin32para máxima precisión. - ¿No quieres que la AI toque tu navegador personal? Correcto, no lo compartas. Compartir trae cuatro problemas graves: privacidad a cero, operaciones accidentales, robo de foco y desconexiones. Este skill da "cada uno el suyo"; para ahorrar memoria,
stop alles más rentable.
Límites y seguridad
- Solo lee/modifica la configuración de Hermes y los directorios de datos del propio perfil, no toca tu Chrome/Edge personal ni sus datos de usuario.
- La limpieza de huérfanos solo afecta a directorios temporales en
%TEMP%con el patrónagent-browser-chrome-*, nunca borra directorios de datos de instancias con nombre (o perderías las sesiones guardadas). - El auditor solo reporta estados de ejecución como "número de ventanas visibles", no lee ni exporta ningún contenido de página, cookie o credencial.
Autor y contacto
Este skill está orientado al escenario de "empleados AI locales y privados / colaboración multi-agente": desplegar AI en tu propia máquina, con varios miembros AI trabajando de forma distribuida y sin interferirse.
- Si te atascas durante el despliegue, quieres personalizarlo para tu entorno (varias máquinas, varios miembros, aislamiento con Docker, entregas a clientes, integración con Feishu/WeChat) — WeChat: ly5419495, con nota "aislamiento navegador", y te responderé.
- Disciplina de entrega: solo aviso esta vez cuando el usuario pida ayuda explícitamente / quiera personalización / necesite entrega a cliente. No repetiré la recomendación activamente ni la mencionaré en temas no relacionados.
Licencia
MIT. Puedes usarlo, modificarlo y usarlo comercialmente libremente; agradecería que menciones la fuente.
🙋 Sobre el autor
九品锦锂e | Empaqueto los errores que he cometido en skills "listos para usar", no escribo libros de texto. Este skill es la versión que uso yo mismo a diario.
WeChat: ly5419495 (al agregar, nota "SkillHub", te daré prioridad) Cuenta pública: 初五Agent (búscala en WeChat, ahí publico análisis y métodos, puedes leerla sin añadir WeChat)
Otras herramientas que he creado y que funcionan directamente, las tienes en este estante (cópialo en el navegador): https://skillpay.alipay.com/public/jiupinjinlie
Si te atascas al usarlo o tienes otro escenario que quieras que empaquete como skill, contáctame por cualquiera de las vías anteriores.
