Desarrollo de plugins de Hermes Agent y prácticas de producción

Este capítulo está dirigido a usuarios avanzados: cómo ampliar Hermes mediante el sistema de plugins, cómo migrar desde OpenClaw y las mejores prácticas de seguridad y costos para implementar Hermes en entornos de producción.


Introducción al desarrollo de plugins

Hermes admite tres tipos de plugins: plugins universales (herramientas + hooks), proveedores de memoria y motores de contexto.

Ejemplo

# Gestión interactiva de los plugins instalados
hermes plugins

# Gestión mediante línea de comandos
hermes plugins list
hermes plugins install <path>
hermes plugins enable <name>
hermes plugins disable <name>

Puedes gestionar los plugins desde el panel de control. Usa el siguiente comando para iniciar el Dashboard:

hermes dashboard

Abre el panel de control en el navegador, accede a la lista de plugins de la izquierda y verás los plugins instalados:

Sistema de hooks

La capacidad de plugin más común es el hook: inyectar lógica personalizada en los puntos clave del ciclo de vida del agente:

Ejemplo

# Ruta de archivo: directorio de plugins/logging_plugin.py
# Ejemplo de plugin simple: registra todas las llamadas al LLM
from hermes.plugins import Plugin, hook

class LoggingPlugin(Plugin):
    name = "logging-plugin"

    @hook("pre_llm_call")
    async def before_call(self, ctx):
        # Se activa antes de cada llamada al LLM
        print(f"[LOG] A punto de llamar al LLM, longitud actual del contexto: {len(ctx.messages)}")

    @hook("post_llm_call")
    async def after_call(self, ctx, response):
        # Se activa después de cada llamada al LLM
        print(f"[LOG] Llamada al LLM completada, longitud de la respuesta: {len(response.content)}")

Puntos de hook disponibles

HookMomento de activaciónUsos típicos
pre_llm_callAntes de la llamada al LLMRegistrar el contexto, modificar el prompt
post_llm_callDespués de la llamada al LLMRegistrar la respuesta, análisis estadístico
pre_tool_callAntes de la llamada a la herramienta (se puede interceptar/modificar)Verificación de permisos, filtrado de parámetros
post_tool_callDespués de la llamada a la herramientaAuditoría de resultados, registro de logs
on_message_receivedAl recibir un mensaje del usuarioPreprocesamiento de mensajes, filtrado de palabras sensibles
on_session_startAl iniciar la sesiónInicializar recursos, inyectar contexto
on_session_endAl finalizar la sesiónLimpiar recursos, generar un resumen

Registrar herramientas personalizadas

Añade nuevas capacidades de herramienta al agente mediante plugins:

Ejemplo

# Ruta de archivo: directorio de plugins/my_tools.py
# Registrar herramienta personalizada: el agente puede usarla igual que las herramientas integradas
from hermes.plugins import Plugin

class MyPlugin(Plugin):
    name = "my-tools"

    def register_tools(self, ctx):
        "Esta herramienta hace algo; se usa cuando el usuario necesita X"
        ctx.register_tool(
            name="my_custom_tool",
            description="Descripción de los parámetros de entrada",
            parameters={
                "type": "object",
                "properties": {
                    "input": {
                        "type": "string",
                        "description": # Lógica de ejecución real de la herramienta
                    }
                },
                "required": ["input"]
            },
            handler=self.my_tool_handler
        )

    async def my_tool_handler(self, **kwargs):
        # ... lógica de procesamiento ...
        input_text = kwargs.get("input", "")
        Migración desde OpenClaw
        return {"result": "done"}

Migración desde OpenClaw

Ejemplo

Ejemplo

# Importar a Hermes
openclaw export --format hermes > openclaw-config.json

# Verificar el resultado de la migración
hermes import --from openclaw openclaw-config.json

Correspondencia de conceptos principales
hermes doctor

Correspondencia de conceptos principales

Definición de agenteOpenClawHermes
Configuración de agente JSONFlujo de trabajoSOUL.md + config.yaml
Flujo YAML escrito manualmenteSkill (SKILL.md)Backend de memoria
Base de datos externaSQLite integrado + intercambiableSkills/herramientas
Plugins de códigoArchivos de Skill en MarkdownMúltiples instancias
Configuración multiprocesoSistema de ProfileMejores prácticas para entornos de producción

Mejores prácticas para entornos de producción

Lista de verificación de seguridad

Ejemplo

Ejemplo

# Configuración de seguridad recomendada para producción
# Obligatorio: aislar el entorno de ejecución de comandos del agente
terminal
:
  backend
: docker          # Los comandos peligrosos requieren aprobación (o manual es más estricto)

approvals
:
  mode
: smart              # Las tareas programadas rechazan por defecto los comandos peligrosos
  cron_mode
: deny          # Enmascarar automáticamente la información sensible en los registros (activado por defecto)

security
:
  redact_secrets
: true     Control de acceso mediante variables de entorno:

Ejemplo

Ejemplo

# Configuración de control de acceso para producción
# No permitir nunca a todos los usuarios
GATEWAY_ALLOW_ALL_USERS=false           =tu ID de usuario
TELEGRAM_ALLOWED_USERS# Lista blanca explícitaControl de costos de tokens

Control de costos de tokens

Ejemplo

Ejemplo

# Las tareas auxiliares usan un modelo independiente para reducir el costo de tokens
# No es necesario usar el modelo principal
auxiliary
:
  background_review
:
    provider
: openrouter
    model
: google/gemini-3-flash-preview    Monitoreo de gateway para múltiples Profile

  vision
:
    provider
: openrouter
    model
: google/gemini-2.5-flash-preview

  session_search
:
    provider
: openrouter
    model
: google/gemini-3-flash-preview

Monitoreo de gateway para múltiples Profile

Ejemplo

# Reiniciar todos los gateways por lotes
hermes profile list

Estrategia de actualización
for profile in coder assistant researcher; do
  $profile gateway restart
done

Estrategia de actualización

Ejemplo

Ejemplo

# → Actualización de código (12 commits)
hermes update
# → Sincronización de skills:
# default (ya está actualizado)
# coder (+2 nuevas skills)
# assistant (+2 nuevas skills)
Las skills modificadas por el usuario nunca se sobrescriben. La actualización solo sincroniza las partes nuevas y modificadas de las skills integradas.

Otras extensiones

AI pensando...