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
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
# 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
| Hook | Moment du déclenchement | Utilisation typique |
|---|---|---|
| pre_llm_call | Avant les appels LLM | Enregistrer le contexte, modifier les prompts |
| post_llm_call | Après les appels LLM | Enregistrer les réponses, analyse statistique |
| pre_tool_call | Avant l'invocation d'outil (peut intercepter/modifier) | Vérification des permissions, filtrage des paramètres |
| post_tool_call | Après l'appel d'outil | Audit des résultats, journalisation |
| on_message_received | Lors de la réception des messages utilisateur | Prétraitement des messages, filtrage des mots sensibles |
| on_session_start | Au début de la session | Initialiser les ressources, injecter le contexte |
| on_session_end | À la fin de la session | Nettoyer 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áð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
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
| Concepts | OpenClaw | Hermes |
|---|---|---|
| Définition de l'agent | Configuration d'agent JSON | SOUL.md + config.yaml |
| Workflow | Écrire manuellement des flux YAML | Compétence (SKILL.md) |
| Backend de mémoire | Base de données externe | SQLite intégré + enfichable |
| Compétences/Outils | Plugin de code | Fichiers de compétences Markdown |
| instances multiples | Configuration multi-processus | Systè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
# 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
# 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
# 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
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
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)
autres extensionsLes 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.