Développement de plugins pour Hermes Agent et pratiques de production

Ce chapitre s'adresse aux utilisateurs avancés : comment étendre Hermes via le système de plugins, comment migrer depuis OpenClaw, et les bonnes pratiques de sécurité et de coût lors du déploiement de Hermes en production.


Premiers pas avec le développement de plugins

Hermes prend en charge trois types de plugins : les plugins polyvalents (outils + hooks), les fournisseurs de mémoire et les moteurs de contexte.

Exemple

# Gérer interactivement les plugins installés
hermes plugins

# Gestion en ligne de commande
hermes plugins list
hermes plugins install <path>
hermes plugins enable <name>
hermes plugins disable <name>

Vous pouvez gérer les plugins dans le tableau de bord. Utilisez la commande suivante pour démarrer le tableau de bord :

hermes dashboard

Ouvrez le tableau de bord dans votre navigateur, ouvrez la liste des plugins à gauche, et vous pouvez voir les plugins installés :

Système de hooks

La capacité de plugin la plus couramment utilisée est le Hook — injecter une logique personnalisée à des points clés du cycle de vie de l'Agent :

Exemple

# Chemin du fichier : plugin directory/logging_plugin.py
# Exemple simple de plugin : enregistrer tous les appels LLM
from hermes.plugins import Plugin, hook

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

    @hook("pre_llm_call")
    async def before_call(self, ctx):
        # Se déclenche avant chaque appel LLM
        print(f"[LOG] Sur le point d'appeler le LLM, longueur actuelle du contexte : {len(ctx.messages)}")

    @hook("post_llm_call")
    async def after_call(self, ctx, response):
        # Se déclenche après chaque appel LLM
        print(f"[LOG] Appel LLM terminé, longueur de la réponse : {len(response.content)}")

Points d'accroche disponibles

HookMoment du déclenchementUtilisation typique
pre_llm_callAvant les appels LLMEnregistrer le contexte, modifier les prompts
post_llm_callAprès les appels LLMEnregistrer les réponses, analyse statistique
pre_tool_callAvant l'invocation d'outil (peut intercepter/modifier)Vérification des permissions, filtrage des paramètres
post_tool_callAprès l'appel d'outilAudit des résultats, journalisation
on_message_receivedLors de la réception des messages utilisateurPrétraitement des messages, filtrage des mots sensibles
on_session_startAu début de la sessionInitialiser les ressources, injecter le contexte
on_session_endÀ la fin de la sessionNettoyer les ressources, générer un résumé

Enregistrement d’outils personnalisés

Ajouter de toutes nouvelles capacités d’outils à l’Agent via des plugins :

Exemple

# Skráarslóð: plugin directory/my_tools.py
# Skráðu sérsniðin verkfæri sem Agentinn getur notað eins og innbyggð verkfæri
from hermes.plugins import Plugin

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

    def register_tools(self, ctx):
        # Skráðu sérsniðin verkfæri, sýnileg í kerfiskvaðningu agentsins
        ctx.register_tool(
            name="my_custom_tool",
            description="Þetta verkfæri gerir eitthvað, notaðu það þegar notandinn þarf X",
            parameters={
                "type": "object",
                "properties": {
                    "input": {
                        "type": "string",
                        "description": "Lýsing á inntaksfæribreytu"
                    }
                },
                "required": ["input"]
            },
            handler=self.my_tool_handler
        )

    async def my_tool_handler(self, **kwargs):
        # Logique d'exécution réelle de l'outil
        input_text = kwargs.get("input", "")
        # ... logique de traitement ...
        return {"result": "done"}

Migration depuis OpenClaw

Si vous utilisez OpenClaw, la solution officielle de migration sans interruption de service est fournie :

Exemple

# Exporter la configuration OpenClaw
openclaw export --format hermes > openclaw-config.json

# Importer vers Hermes
hermes import --from openclaw openclaw-config.json

# Vérifier les résultats de migration
hermes doctor

Comparaison des concepts principaux

ConceptsOpenClawHermes
Définition de l'agentConfiguration d'agent JSONSOUL.md + config.yaml
WorkflowÉcrire manuellement des flux YAMLCompétence (SKILL.md)
Backend de mémoireBase de données externeSQLite intégré + enfichable
Compétences/OutilsPlugin de codeFichiers de compétences Markdown
instances multiplesConfiguration multi-processusSystème de profils

Bonnes pratiques pour l'environnement de production

Liste de contrôle de sécurité

Configuration de sécurité recommandée pour le déploiement en production :

Exemple

# Chemin du fichier : ~/.hermes/config.yaml
# Configuration de sécurité recommandée pour l'environnement de production
terminal
:
  backend
: docker          # Requis : isoler l'environnement d'exécution des commandes de l'Agent

approvals
:
  mode
: smart              # Les commandes dangereuses nécessitent une approbation (ou manual est plus strict).
  cron_mode
: deny          # Les tâches planifiées rejettent les commandes dangereuses par défaut

sécurité
:
  redact_secrets
: true     # Masquer automatiquement les informations sensibles dans les journaux (activé par défaut)

Contrôle d'accès dans les variables d'environnement :

Exemple

# Chemin du fichier : ~/.hermes/.env
# Configuration du contrôle d'accès pour l'environnement de production
GATEWAY_ALLOW_ALL_USERS=false           # Ne jamais autoriser tous les utilisateurs
TELEGRAM_ALLOWED_USERS=votre identifiant utilisateur# Liste blanche explicite

Contrôle des coûts des tokens

Les tâches auxiliaires utilisent des modèles moins chers, ce qui réduit considérablement les coûts d'exploitation :

Exemple

# Chemin du fichier : ~/.hermes/config.yaml
# Utiliser un modèle séparé pour les tâches auxiliaires afin de réduire les coûts des tokens
auxiliaire
:
  background_review
:
    fournisseur
: openrouter
    model
: google/gemini-3-flash-preview    # Pas besoin d'utiliser le modèle principal

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

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

Surveillance des passerelles multi-profils

Exemple

# Afficher l'état de la passerelle pour tous les profils simultanément
hermes profile list

# Redémarrer par lots toutes les passerelles
for profile in coder assistant researcher; do
  $profile gateway restart
done

Stratégie de mise à jour

Mettre à jour le code et les compétences intégrées de tous les profils avec une seule commande :

Exemple

# Mise à jour unique du code + synchronisation des nouvelles compétences intégrées pour tous les profils
hermes update
# → Mise à jour du code (12 commits)
# → Synchronisation des compétences :
# default (déjà à jour)
# coder (+2 nouvelles compétences)
# assistant (+2 nouvelles compétences)

Les compétences modifiées par l’utilisateur ne seront jamais écrasées. Les mises à jour ne synchronisent que les parties nouvelles et modifiées des compétences intégrées.

autres extensions