El catálogo de plugins de Hermes ya está aquí: deja de adivinar qué plugin es seguro


¿Alguna vez te has quedado mirando una búsqueda en GitHub en busca de plugins de Hermes, preguntándote cuál de los repos parecidos está realmente mantenido — y qué hará ese código en tu máquina una vez lo instales? Esa duda es razonable: un plugin de Hermes es Python que se ejecuta dentro del proceso del agente, así que instalar uno se parece más a entregarle la llave de tu casa a un desconocido que a añadir una dependencia.

El PR #69446, fusionado el 9 de septiembre, ataca exactamente ese dolor: Hermes ahora incluye un catálogo de plugins revisado por humanos que resuelve el descubrimiento y la confianza en un solo lugar. En lugar de cazar por GitHub, ejecutas hermes plugins search contra un índice oficial y curado. En lugar de apostar por un README, cada entrada del catálogo está fijada a un commit exacto y debe declarar sus capacidades por adelantado — así sabes qué estás instalando antes de instalarlo.

Qué es el catálogo de plugins

Primero, una distinción: los plugins de aquí son plugins nativos en proceso (in-process) — las extensiones que se ejecutan dentro de Hermes, registran sus propias herramientas y hooks, y se gestionan a través de plugins.entries. Son una capa distinta del catálogo de servidores MCP, que conecta servicios externos mediante Model Context Protocol. El catálogo MCP responde a «¿cómo llego a los servicios externos?»; el catálogo de plugins responde a «¿cómo extiendo el propio Hermes?».

Físicamente, el catálogo es un conjunto de archivos YAML en el directorio plugin-catalog/ del repositorio — un archivo por cada entrada de plugin:

name: hermes-telegram-business   # clave única del catálogo; se instala con este nombre
repo: https://github.com/NousResearch/hermes-telegram-business
sha: e905f3bc5eeaa5a9dab9bc5155601b3ebec75757  # pin de commit completo de 40 caracteres
description: One-line description
maintainer: NousResearch
tier: official          # valores: official o community
platforms: []           # vacío = todas las plataformas
capabilities:           # lo que este plugin declara registrar
  provides_tools: []
  provides_hooks: []
  provides_middleware: []
  requires_env: []

El catálogo arrancó con 7 entradas iniciales: 3 oficiales (plugin-llm-example, plugin-llm-async-example, hermes-telegram-business) y 4 de la comunidad (hermes-plugin-chrome-profiles de @anpicasso, hermes-snapcompact, jackal-verified, herdr-auto-reconcile). Las oficiales proceden de los repos de NousResearch; las de la comunidad, de mantenedores independientes — chrome-profiles alterna las herramientas del browser entre perfiles de Chrome/Edge locales y remotos vía CDP, y snapcompact archiva el historial de conversación como fotogramas bitmap densos que los modelos de visión releen por aproximadamente un tercio del coste en tokens.

Buscar, instalar, listar: los tres comandos que importan

Todo gira en torno a hermes plugins. Ojo: esto aterrizó en main el 9 de septiembre y todavía no está en ninguna release — la release oficial más reciente, la v0.21.1 (7 de septiembre), es anterior. Para usarlo hoy necesitas un build que incluya la fusión.

Busca en todo el catálogo — sin argumentos lista todo; una palabra clave encuentra coincidencias en nombres, descripciones y herramientas declaradas:

hermes plugins search
hermes plugins search telegram      # coincide con nombre, descripción o herramientas que mencionen telegram
hermes plugins search --json        # legible por máquina, para scripts

Instala — por nombre de catálogo, por URL de Git o mediante la forma abreviada owner/repo:

hermes plugins install hermes-telegram-business   # acierto en el catálogo: instala el SHA fijado y revisado
hermes plugins install anpicasso/hermes-plugin-chrome-profiles  # owner/repo = fuente personalizada (sin revisar)
hermes plugins install https://github.com/xxx/my-plugin          # URL de Git completa

La distinción de origen es el corazón del modelo de confianza. Un nombre que acierta en el catálogo instala el commit auditado exacto, imprime el tier y el pin ([official] pinned @ e905f3bc), muestra el resumen de capacidades y registra la procedencia en un archivo .hermes-catalog.json junto al plugin. Una URL de Git o la forma abreviada owner/repo imprime una advertencia amarilla de «fuente personalizada (sin revisar)» — ahí vas por tu cuenta. En ambos casos se te pregunta si quieres habilitar el plugin de inmediato; instalado no significa habilitado, y el aviso de habilitación muestra lo que el plugin quiere registrar.

Mira lo que tienes:

hermes plugins list
hermes plugins list --plain          # texto plano compacto en lugar de la tabla de Rich
hermes plugins show hermes-telegram-business   # detalles de un plugin

El modelo de confianza: por qué el catálogo se gana su lugar

La credibilidad del catálogo no es una insignia: es una cadena de mecanismos que se hacen cumplir, documentada en el README del catálogo:

  • Admisión con fusión humana. Las entradas solo entran mediante un PR al repositorio de hermes-agent, revisado y fusionado por un mantenedor. Nada de registro de autoservicio ni ingesta automatizada.
  • Pines de commit exactos y obligatorios. Cada entrada exige un SHA completo de 40 caracteres. Las ramas, las tags y los SHA cortos se rechazan. Las instalaciones hacen checkout de ese commit exacto — nunca del último HEAD — de modo que lo que dice el catálogo y lo que ejecutas es el mismo código.
  • Madurez del pin de dos semanas. La versión fijada debe tener al menos dos semanas de antigüedad en el momento de fijarla, replicando la política de cadena de suministro aplicada a otras dependencias fijadas — tiempo para que la comunidad detecte una release comprometida antes de que Hermes publique un puntero hacia ella.
  • Actualizar un pin es un PR nuevo. Cambiar el SHA de una entrada es un PR nuevo y re-revisado cuyo diff (SHA anterior → SHA nuevo) es la superficie de revisión. Cada movimiento de puntero cuenta con una persona examinando el rango de commits upstream.
  • Las capacidades declaradas deben coincidir con la realidad. hermes plugins validate carga el plugin en un subproceso desechable (scratch) y compara las provides_tools/provides_hooks declaradas con lo que register(ctx) registra de verdad. Si no coinciden, la entrada se rechaza — añadir capacidades no declaradas se trata como un problema de seguridad. La CI de admisión ejecuta esta comprobación sobre cada entrada modificada.
  • Retirada = lista negra. Cuando una entrada se retira por razones de seguridad o de política, pasa a removed.yaml, y cualquier instalación que coincida con su nombre o su repo se rechaza en todas las superficies (CLI, dashboard, escritorio). La CLI tiene una vía de escape ruidosa, --allow-removed, que imprime una advertencia en rojo; las demás no la tienen.

El catálogo también jubila una pieza de la historia: el índice comunitario provisional de plugins apuntaba a una URL canónica de repositorio que nunca llegó a existir y no tenía ningún control de admisión. Este cambio elimina ese índice por completo y lo consolida todo en el catálogo integrado en el repositorio.

Validar, actualizar y gestionar el día a día

Una vez instalados los plugins, se aplican los comandos habituales del ciclo de vida:

hermes plugins update hermes-telegram-business   # en instalaciones de catálogo, re-fija al SHA revisado
hermes plugins disable hermes-telegram-business  # deshabilita sin eliminar
hermes plugins enable hermes-telegram-business   # vuelve a habilitar
hermes plugins remove hermes-telegram-business   # desinstala (alias: rm, uninstall)
hermes plugins capabilities                      # capacidades declaradas frente a concedidas, por plugin

¿Escribes un plugin y quieres que aparezca en la lista? hermes plugins validate <plugin-dir> es el mismo control que ejecuta la CI de admisión — pásalo en local antes de abrir el PR, y hermes plugins doctor profundiza aún más contra los contratos reales de runtime. Los clientes refrescan el catálogo desde el JSON del sitio de documentación (/docs/api/plugin-catalog.json) como máximo cada 6 horas y, sin conexión, recurren a la copia integrada en el repositorio, de modo que un fallo de red nunca bloquea una instalación.

Un recordatorio sobre el suelo de seguridad: los plugins se ejecutan dentro del proceso de Hermes, así que el catálogo reduce el riesgo — no lo elimina. Después de instalar cualquier cosa, merece la pena echar un vistazo periódico a hermes plugins capabilities para ver qué tiene realmente cada plugin. En cuanto al mecanismo del plugin en sí — configuración y escribir el tuyo propio —, nuestra guía de plugins de model provider para pip lo recorre paso a paso; combinada con el catálogo de servidores MCP, los canales oficiales cubren ya la mayor parte de lo que de otro modo tendrías que construir a mano.