Conectado Hermes Agent a Internet y YouTube

Vistas: 0
0:00 / 0:00

En mi anterior entrega te presenté por primera vez a Hermes, mi compañero de aventuras en el mundo de la inteligencia artificial local. Te estuve mostrando de forma general de qué es capaz y qué posibilidades tiene, pero hoy quiero profundizar en dos características que considero cruciales para lograr una verdadera soberanía digital en nuestro día a día. Cuando trabajamos con un modelo de lenguaje en local, nos enfrentamos a un problema evidente: el asistente vive en una especie de habitación cerrada y sin ventanas. Conoce a la perfección la teoría y los hechos históricos hasta el momento en que terminó su entrenamiento, pero no tiene ni la más remota idea de lo que ocurre en el mundo exterior en este preciso instante. Si le preguntas por una herramienta de software que acaba de salir al mercado, por el clima que hace fuera o por una noticia de hace unas horas, el modelo no sabrá qué responderte. En el peor de los casos, alucinará e intentará inventarse una respuesta muy convincente para intentar agradarte.

Para solucionar esto de raíz, he decidido dotar a mi asistente de dos herramientas que le permiten buscar en internet de forma completamente autónoma, pero respetando nuestra privacidad y sin tener que tragarse publicidad molesta por el camino. Se trata de conectar su cerebro con fuentes de datos vivas.

El protocolo que lo conecta todo: MCP

Para que Hermes pueda interactuar con el mundo exterior de forma estandarizada y segura, utilizo algo denominado Model Context Protocol o MCP. No te dejes asustar por la terminología. Me gusta explicar el MCP como si fuera un puerto USB-C virtual para nuestra inteligencia artificial.

De la misma manera que a un ordenador físico le conectamos un ratón o un teclado para que adquiera nuevas capacidades físicas, con el protocolo MCP lo que hacemos es enchufar herramientas digitales directamente a nuestro asistente de inteligencia artificial. El modelo de lenguaje aprende a utilizar estos conectores de forma autónoma. Si el asistente considera que necesita información actualizada para resolver una duda que le acabamos de plantear, decide usar la herramienta correspondiente de forma transparente para nosotros. Él solo se da cuenta de que no sabe algo, decide buscarlo, consume la herramienta, procesa la respuesta y nos la presenta ya digerida.

SearXNG: Un motor de búsqueda bajo tu control

El primer conector de gran calibre que he integrado es SearXNG. Se trata de un motor de metabúsqueda libre, de código abierto y extremadamente centrado en la privacidad de los usuarios. En lugar de rastrear internet por sus propios medios, lo que hace SearXNG es consultar de forma simultánea a un montón de buscadores de primer nivel, como Google, Bing, Brave o DuckDuckGo. Posteriormente, recopila los resultados, elimina la publicidad invasiva, purga los molestos rastreadores y nos ofrece la información limpia.

Tengo este servicio alojado directamente en casa, corriendo de forma incansable en mi pequeño ordenador Slimbook One. Al estar en mi red local, obtengo dos ventajas espectaculares:

Privacidad absoluta

Nuestras consultas a los grandes buscadores se realizan de manera anónima a través de nuestra propia instancia. Para los servidores externos, es mi servidor doméstico el que realiza una consulta puntual; nadie sabe qué usuario concreto la ha solicitado, evitando así el bombardeo continuo de anuncios dirigidos que intentan predecir nuestros gustos.

Formato estructurado para la IA

SearXNG nos permite obtener las respuestas en un formato de datos ordenado denominado JSON. Mientras que los humanos preferimos interfaces visuales con imágenes y textos llamativos, las inteligencias artificiales adoran las listas de datos estructuradas de este estilo. Al recibir la información estructurada, Hermes puede analizarla a la velocidad del rayo y extraer lo verdaderamente relevante sin esfuerzo.

Por ejemplo, el otro día le pedí a mi asistente que elaborara una presentación técnica en formato PDF sobre una materia muy concreta de programación en Bash. En lugar de ponerme yo a navegar entre decenas de pestañas de navegadores, esquivando ventanas de aceptación de cookies y publicidad molesta, Hermes recurrió a SearXNG, recopiló la información técnica reciente de la web, la sintetizó en un índice coherente y me entregó el documento final perfectamente estructurado.

Invidious: Acceso libre a la videoteca mundial sin anuncios

La segunda gran herramienta que he sumado a las habilidades de Hermes se llama Invidious. YouTube es posiblemente el mayor catálogo de tutoriales y conocimiento audiovisual que existe en el planeta, pero intentar hacer búsquedas de manera automatizada allí es todo un reto. La plataforma corporativa impone límites muy estrictos para acceder a sus datos, nos obliga a registrarnos para obtener claves de programación y nos bombardea con publicidad invasiva en cada esquina.

Invidious viene al rescate como un frontal alternativo de código abierto. Nos permite interactuar con los servidores de la plataforma de vídeo de forma limpia, sin rastreo, sin cookies de seguimiento y sin anuncios de ningún tipo.

He optado por hospedar Invidious en mi servidor local en casa y no en un servidor virtual en la nube. La razón de esto es sencilla y conviene tenerla muy en cuenta: las grandes plataformas bloquean de inmediato las direcciones IP de los centros de datos comerciales porque detectan que hay herramientas automáticas consumiendo sus recursos sin generarles ingresos publicitarios. Al realizar las consultas desde mi conexión doméstica, las peticiones fluyen con total normalidad, permitiendo a Hermes recopilar metadatos de los vídeos de manera fluida y discreta.

El poder de la colaboración: Subagentes paralelos

Lo que me parece más divertido y potente de esta configuración es que Hermes puede combinar la fuerza de ambos mundos usando pequeños ayudantes virtuales llamados subagentes.

Cuando le planteo a Hermes una consulta de aprendizaje compleja, como buscar recursos para aprender el lenguaje de programación Rust, él no se limita a darnos una respuesta estática de su memoria. El asistente activa de manera de lo más natural dos hilos de trabajo paralelos:

  • Un subagente que utiliza SearXNG para rastrear la web en busca de documentación oficial, manuales en español y tutoriales escritos de prestigio.
  • Otro subagente que utiliza Invidious para rastrear la plataforma de vídeo en busca de cursos prácticos en formato de vídeo.

Al finalizar la búsqueda, los ayudantes vuelven a la base y Hermes se encarga de analizar y cruzar toda la información. Analiza las duraciones de los vídeos, la cantidad de visitas, el nivel de detalle de los artículos y nos proporciona una recomendación razonada y desglosada paso a paso. Nos dirá qué ver si solo disponemos de una hora libre y qué leer si preferimos adentrarnos en la teoría avanzada. Todo este análisis ocurre de forma invisible en mi servidor doméstico, ahorrándome horas de navegación infructuosa.

Todo ordenado en contenedores Docker

Para no ensuciar mi equipo ni pelearme con configuraciones extrañas de dependencias de software, lo tengo todo estructurado con contenedores Docker. Cada pieza funciona en su propio compartimento virtual e independiente: SearXNG en una caja, Invidious en otra y las herramientas MCP en otra.

De este modo, da igual que una herramienta requiera una versión antigua de Python y otra utilice librerías modernas de Node.js; cada una tiene su entorno ideal y se ejecutan de manera aislada. Es una forma limpia y segura de cacharrear y mantener nuestros servicios siempre actualizados con un simple comando.

A continuación, vamos a ver detalladamente cómo puedes instalar ambas herramientas en tu propio servidor doméstico utilizando Docker Compose.


Guía de instalación paso a paso

Si tú también quieres disfrutar de la libertad de realizar búsquedas sin censura, sin anuncios y dar de comer datos frescos a tu inteligencia artificial, te he preparado esta guía detallada para desplegar tanto SearXNG como Invidious en tu propia infraestructura local.

Para este despliegue utilizaremos Docker y Docker Compose, por lo que es un requisito indispensable que los tengas instalados en tu máquina de pruebas o servidor doméstico.

Desplegando SearXNG en tu servidor local

SearXNG requiere de una base de datos en memoria sumamente rápida para gestionar la caché y evitar que los buscadores externos nos bloqueen por realizar demasiadas peticiones seguidas. Para ello utilizaremos Redis, una base de datos que funciona directamente en la memoria RAM del sistema.

Para comenzar, te recomiendo crear una carpeta específica en tu sistema de archivos. Por ejemplo, puedes abrir una terminal en tu servidor y teclear los siguientes comandos:

Para comenzar, te recomiendo crear una carpeta específica en tu sistema de archivos. Por ejemplo, puedes abrir una terminal en tu servidor y teclear los siguientes comandos:

mkdir -p ~/servicios/searxng
cd ~/servicios/searxng
mkdir searxng

Dentro de este directorio principal, vamos a crear el archivo de configuración para levantar los contenedores. Utilizaremos un archivo llamado compose.yml. Puedes abrir tu editor de texto favorito y pegar el siguiente bloque de configuración:

# Read the documentation before using the `docker-compose.yml` file:
# https://docs.searxng.org/admin/installation-docker.html

name: searxng

services:
  core:
    container_name: searxng-core
    image: docker.io/searxng/searxng:latest
    restart: always
    ports:
      - 9009:8080
    volumes:
      - ./core-config/:/etc/searxng/:Z
      - core-data:/var/cache/searxng/
    networks:
      - proxy
      - internal
    labels:
      - traefik.http.services.searxng.loadbalancer.server.port=8080
      - traefik.http.routers.searxng.rule=Host(`searxng.tucasa.corp`)

  valkey:
    container_name: searxng-valkey
    image: docker.io/valkey/valkey:9-alpine
    command: valkey-server --save 30 1 --loglevel warning
    restart: always
    volumes:
      - valkey-data:/data/
    networks:
      - internal

volumes:
  core-data:
  valkey-data:

networks:
  proxy:
    external: true
  internal: {}

Para que entendamos perfectamente qué estamos haciendo en este archivo, paso a desglosarte los puntos más importantes:

  • valkey: Este servicio levanta la base de datos temporal que optimiza las consultas. El comando que le pasamos le indica que no persista los datos en el disco duro de forma constante, lo que ahorra escrituras en nuestra unidad de almacenamiento y acelera el rendimiento al máximo.
  • searxng: Es el corazón del buscador. Mapeamos el puerto 8080 de nuestro servidor al puerto interno del contenedor para poder acceder a la interfaz web escribiendo la dirección de nuestro servidor en cualquier navegador.

Desplegar Invidious requiere un poco más de trabajo porque necesita una base de datos relacional robusta como PostgreSQL para almacenar las preferencias de los usuarios, las suscripciones locales y las cachés de vídeo de forma permanente.

Al igual que hicimos con SearXNG, vamos a estructurar las carpetas en nuestro servidor:

mkdir -p ~/servicios/invidious
cd ~/servicios/invidious

En este directorio, crearemos nuestro archivo compose.yml para levantar tanto la base de datos de PostgreSQL como el propio servicio de Invidious. Abre tu editor de texto y copia la siguiente configuración:

services:
  invidious:
    container_name: invidious
    image: quay.io/invidious/invidious:latest
    restart: unless-stopped
    init: true
    ports:
      - 4000:3000
    environment:
      INVIDIOUS_CONFIG: |
        db:
          dbname: invidious
          user: kemal
          password: kemal
          host: invidious-db
          port: 5432
        check_tables: true
        invidious_companion:
        - private_url: "http://companion:8282/companion"
        invidious_companion_key: "K7B9X2M5W4V1Q8P3"
        hmac_key: "K7B9X2M5W4V1Q8P3"
    healthcheck:
      test: wget -nv --tries=1 --spider http://127.0.0.1:3000/api/v1/stats || exit 1
      interval: 30s
      timeout: 5s
      retries: 2
    logging:
      options:
        max-size: "1G"
        max-file: "4"
    depends_on:
      - invidious-db
    networks:
      - internal
      - proxy
    labels:
      - traefik.http.services.invidious.loadbalancer.server.port=3000
      - traefik.http.routers.invidious.rule=Host(`invidious.tucasa.corp`)

  companion:
    image: quay.io/invidious/invidious-companion:latest
    container_name: companion
    restart: unless-stopped
    init: true
    environment:
       - SERVER_SECRET_KEY=K7B9X2M5W4V1Q8P3
    #ports:
    #  - "127.0.0.1:8282:8282"
    logging:
      options:
        max-size: "1G"
        max-file: "4"
    cap_drop:
      - ALL
    read_only: true
    # cache for youtube library
    volumes:
      - companioncache:/var/tmp/youtubei.js:rw
    security_opt:
      - no-new-privileges:true
    networks:
      - internal

  invidious-db:
    image: docker.io/library/postgres:14
    container_name: invidious-db
    init: true
    restart: unless-stopped
    volumes:
      - postgresdata:/var/lib/postgresql/data
      - ./config/sql:/config/sql
      - ./docker/init-invidious-db.sh:/docker-entrypoint-initdb.d/init-invidious-db.sh
    environment:
      POSTGRES_DB: invidious
      POSTGRES_USER: kemal
      POSTGRES_PASSWORD: kemal
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
    networks:
      - internal

volumes:
  postgresdata:
  companioncache:

networks:
  proxy:
    external: true
  internal: {}

Integrando las herramientas en el cerebro de la IA

Una vez que tenemos ambos contenedores funcionando a la perfección en nuestra red local, llega el momento más gratificante de todos: conectarlos con Hermes para dotarle de sus nuevos superpoderes de investigación.

Para ello, utilizaremos el conector MCP de SearXNG e Invidious que hemos configurado previamente. Estos pequeños programas actúan de intermediarios entre la API de nuestro modelo de lenguaje local y los puertos que acabamos de exponer en nuestra máquina.

Cuando le preguntamos a Hermes por una temática concreta, el flujo de trabajo interno es una delicia visual para cualquier amante de la tecnología:

Fase de detección de necesidad

Hermes recibe nuestra pregunta en lenguaje natural. Su analizador interno determina de inmediato que no dispone de datos actuales sobre el tema o que requiere una validación externa en la red para ofrecer una respuesta de calidad.

Fase de ejecución del subagente

Hermes invoca su herramienta de búsqueda web. Envía una petición interna a nuestra instancia de SearXNG, la cual consulta a múltiples motores de búsqueda de forma silenciosa. A la vez, si estima que existen tutoriales visuales de interés, realiza una consulta paralela en nuestra instancia de Invidious para indexar vídeos explicativos.

Fase de síntesis y entrega

La inteligencia artificial recopila los datos estructurados en formato JSON que le devuelven nuestros servicios locales. Limpia las redundancias, descarta la información irrelevante y nos redacta una respuesta coherente, estructurada y con recomendaciones basadas en datos reales y contrastados en el momento.

Conclusión y próximos pasos en nuestro viaje

Como has podido comprobar a lo largo de este extenso recorrido, lograr la soberanía digital no es una tarea imposible reservada únicamente a grandes ingenieros de sistemas. Con un poco de paciencia, un miniordenador en casa y el ecosistema de contenedores Docker, podemos levantar nuestra propia infraestructura de búsqueda privada y libre de rastreadores comerciales.

Esto no solo nos protege a nosotros frente a la minería de datos y el bombardeo publicitario incesante, sino que además nos abre la puerta a alimentar a nuestros modelos de lenguaje locales con información fresca, verídica y estructurada de forma impecable.

Te recuerdo que el próximo sábado 6 de junio de 2026 estaré en el Linux Center de Slimbook impartiendo un par de charlas y un taller práctico de varias horas sobre Hermes y soluciones con agentes inteligentes con OpenClaw. Gracias a la generosidad de Slimbook, dispondremos de equipos de pruebas listos en la sala para que vengas a cacharrear con nosotros en vivo y en directo. Tienes el enlace para reservar tu plaza gratuita en la sección de enlaces finales de este artículo.

En el próximo episodio del podcast daremos un paso más y nos meteremos de lleno en una aplicación muy práctica y cotidiana para el hogar. Te mostraré cómo he diseñado un sistema de generación aumentada por recuperación mixto con bases de datos vectoriales para que Hermes organice nuestras recetas de cocina, planifique los menús semanales de comida y cena y nos genere de forma inteligente la lista de la compra optimizada. ¡Una auténtica delicia de automatización doméstica!

Espero que disfrutes de estas herramientas tanto como yo lo hago diariamente configurando y mejorando mi entorno local. No dudes en dejarme tus dudas e impresiones en los comentarios. ¡Nos vemos en el próximo artículo! ¡A cacharrear se ha dicho!


Mas información,

Deja una respuesta