Hermes multi-instance sans conflits : le guide complet des profils


Quand les gens essaient Hermes pour la première fois, ils ont tendance à tout mettre dans la session par défaut : programmation, e-mails, recherche, tâches planifiées — tout mélangé. Très vite, la mémoire devient confuse, la personnalité se dilue et la facture API devient impossible à attribuer.

Hermes a une réponse plus élégante : les profils. Un profil est un répertoire home Hermes indépendant avec son propre :

  • config.yaml (modèle, outils, paramètres de gateway)
  • .env (clés API, tokens de bot)
  • SOUL.md (personnalité / prompt système)
  • memories/ (mémoire)
  • sessions/ (historique des conversations)
  • skills/ (compétences)
  • cron (tâches planifiées)
  • état du gateway

Pensez-y comme à plusieurs instances Hermes isolées sur une seule machine. Ce guide montre comment transformer cette machine en un véritable studio IA multi-locataire.


1. Démarrage rapide : créer un profil de programmation

hermes profile create coder
coder setup
coder chat

Trois lignes. coder est maintenant une commande à part entière avec sa propre configuration, mémoire et sessions. Vous pouvez :

coder config set model.default anthropic/claude-sonnet-4
echo "Tu es un ingénieur senior spécialisé en Python et en infrastructure." > ~/.hermes/profiles/coder/SOUL.md
coder chat

Pendant ce temps, hermes chat reste inchangé.


2. Ce qu’est vraiment un profil : isolation via HERMES_HOME

Hermes détermine où se trouve le “home” via la variable d’environnement HERMES_HOME. La commande coder chat est essentiellement :

HERMES_HOME=~/.hermes/profiles/coder hermes chat

Comme get_hermes_home() est utilisé dans plus de 119 endroits, la configuration, la mémoire, les sessions, les compétences, le PID du gateway, les logs et le cron sont automatiquement limités à ce répertoire.

Mais attention : un profil n’est pas un bac à sable. Avec le backend de terminal local par défaut, Hermes s’exécute toujours comme votre utilisateur OS et peut accéder à l’ensemble du système de fichiers. Pour isoler le système de fichiers, utilisez Docker.


3. Trois façons de créer un profil

3.1 Profil vierge

hermes profile create mybot

Crée un profil vierge avec des skills inclus. Exécutez ensuite mybot setup pour configurer les clés API.

3.2 Cloner uniquement la configuration (--clone)

hermes profile create work --clone

Copie le config.yaml, .env, SOUL.md et skills du profil actuel. Même modèle et capacités, mais mémoire et sessions neuves.

Idéal pour : même modèle, personnalité ou répertoire de travail différent.

3.3 Tout cloner (--clone-all)

hermes profile create backup --clone-all

Copie tout : configuration, clés, personnalité, toutes les mémoires, compétences, cron. Un instantané de travail.

Note : l’historique des sessions, state.db, backups, state-snapshots et checkpoints sont exclus car ils peuvent atteindre des dizaines de Go. Pour une sauvegarde complète incluant l’historique, utilisez hermes profile export ou hermes backup.

3.4 Cloner depuis un profil spécifique

hermes profile create work --clone-from coder
hermes profile create work-backup --clone-from coder --clone-all

3.5 Ajouter une description pour le routage Kanban

hermes profile create researcher --description "Lit le code source et la documentation externe, rédige des résultats."

L’orchestrateur Kanban utilise cette description pour router les tâches vers le bon profil.


4. Changer et utiliser des profils

Alias de commandes automatiques

Chaque profil obtient un wrapper dans ~/.local/bin/<name> :

coder chat
personal-bot gateway start
research config set model.default openai/gpt-4o

Flag -p explicite

hermes -p coder chat
hermes --profile=coder doctor
hermes chat -p coder -q "hello"    # fonctionne à n'importe quelle position

Défaut persistant (hermes profile use)

hermes profile use coder
hermes chat          # cible maintenant coder
hermes profile use default

Comme kubectl config use-context.

Savoir où vous êtes

  • Le prompt devient coder ❯
  • La bannière de démarrage affiche Profile: coder
  • hermes profile affiche le nom, le chemin, le modèle et l’état du gateway

5. Plusieurs gateways : un bot par profil

Chaque profil peut exécuter son propre gateway :

coder gateway start
personal-bot gateway start
research gateway start

Chaque gateway est un processus indépendant avec son propre token de bot. Configurez différents tokens Telegram/Discord/Slack par profil :

nano ~/.hermes/profiles/coder/.env
nano ~/.hermes/profiles/personal-bot/.env

Sécurité : verrouillage des tokens

Si deux profils utilisent accidentellement le même token de bot, le deuxième gateway échoue et indique le profil en conflit. Pris en charge pour Telegram, Discord, Slack, WhatsApp et Signal.

Services persistants

coder gateway install      # crée le service hermes-gateway-coder
personal-bot gateway install

Les services systemd/launchd sont indépendants et redémarrent indépendamment.

Script de gestion groupée

Enregistrez ceci sous ~/.local/bin/hermes-gateways :

#!/bin/sh
set -eu

profiles="default coder personal-bot research"

usage() {
  echo "Usage: hermes-gateways {start|stop|restart|status|list}"
}

run_for_profile() {
  profile="$1"
  action="$2"
  if [ "$profile" = "default" ]; then
    hermes gateway "$action"
  else
    hermes -p "$profile" gateway "$action"
  fi
}

action="${1:-}"
case "$action" in
  start|stop|restart|status)
    for profile in $profiles; do
      echo "==> $action $profile"
      run_for_profile "$profile" "$action"
    done
    ;;
  list)
    hermes gateway list
    ;;
  *)
    usage
    exit 2
    ;;
esac

Puis :

chmod +x ~/.local/bin/hermes-gateways
hermes-gateways start
hermes-gateways stop
hermes-gateways restart
hermes-gateways status

6. Multiplexage : un gateway pour tous les profils

Quand vous avez beaucoup de profils, un processus par profil devient lourd. Hermes prend en charge le multiplexage : seul le gateway du profil par défaut s’exécute, et il sert les messages entrants pour tous les profils.

L’activer

hermes config set gateway.multiplex_profiles true
hermes gateway restart

Ou dans ~/.hermes/config.yaml :

gateway:
  multiplex_profiles: true

Ce qui change en mode multiplexé

  1. Les profils secondaires ne peuvent pas démarrer leur propre gateway Si coder est déjà servi par le multiplexeur, coder gateway start échoue.

  2. Les plateformes HTTP entrantes utilisent le préfixe /p/<profile>/

    POST http://host:8644/webhooks/<route>          # profil par défaut
    POST http://host:8644/p/coder/webhooks/<route>  # profil coder

    Les plateformes liées à un port (webhook, api_server, msgraph_webhook, feishu, wecom_callback, bluebubbles, sms, whatsapp_cloud, line) ne peuvent être configurées que sur le profil par défaut. Les autres profils sont accessibles via le préfixe.

  3. Les plateformes de polling/connexion ont toujours besoin d’un token par profil Telegram, Discord, Slack, Matrix, Signal, etc. fonctionnent en multiplexage, mais chaque profil doit avoir son propre token de bot. Deux profils ne peuvent pas interroger la même paire (plateforme, token).

  4. Les clés de session sont namespacées par profil agent:<profile>:... garantit que deux profils sur la même plateforme/discussion ne collisionnent jamais. Le profil par défaut conserve le namespace historique agent:main:....

  5. Un seul PID, verrou et surface d’état hermes status affiche le multiplexeur et les profils servis ; hermes status -p coder filtre sur coder.

Quand utiliser le multiplexage

  • Déploiements conteneurisés/VPS où N unités de supervision sont lourdes.
  • Beaucoup de profils à faible trafic qui ne justifient pas chacun un processus.
  • Vous voulez un seul point d’entrée pour démarrer, surveiller et redémarrer.

Quand ne pas l’utiliser :

  • Vous avez besoin d’une isolation stricte au niveau du processus.
  • La panne d’un profil ne doit pas affecter les autres.
  • Vous voulez redémarrer un profil indépendamment.

7. Routes de profils : assigner des communautés différentes à des agents différents

Quand plusieurs communautés partagent le même token de bot — par exemple un bot Discord qui sert plusieurs guildes — vous pouvez router des guildes/canaux/threads spécifiques vers différents profils :

gateway:
  multiplex_profiles: true
  profile_routes:
    - name: acme-server
      platform: discord
      guild_id: "1234567890"
      profile: acme

    - name: acme-support
      platform: discord
      guild_id: "1234567890"
      chat_id: "9876543210"
      profile: acme-support

    - name: tg-group
      platform: telegram
      chat_id: "-1001234567890"
      profile: tg-profile

Règles de correspondance

  • Tous les champs déclarés doivent être satisfaits (AND).
  • Les champs non déclarés sont ignorés.
  • Spécificité : thread_id (8) > chat_id (4) > guild_id (2) > plateforme seule.
  • Une route sur chat_id correspond aussi aux threads/posts de forum dont le canal parent est ce canal.

Si une route nomme un profil qui n’existe pas, les messages retombent sur le profil par défaut.


8. Répertoire de travail et isolation HOME

Définir un répertoire de travail par défaut

Si vous voulez qu’un profil démarre dans un dossier de projet spécifique :

terminal:
  backend: local
  cwd: /absolute/path/to/project

Note : cwd: "." dans le backend local signifie “le répertoire depuis lequel Hermes a été lancé”, pas le répertoire du profil.

HOME par profil

Par défaut, les installations sur l’hôte conservent le vrai HOME de l’utilisateur OS pour que des outils comme git, ssh, gh, npm, Claude Code et Codex puissent réutiliser les identifiants existants. L’inconvénient est que les profils partagent cet état CLI au niveau utilisateur.

Pour une isolation CLI stricte par profil, définissez :

terminal:
  home_mode: profile

Hermes lance alors les sous-processes avec HOME={HERMES_HOME}/home. Vous devrez initialiser des ~/.ssh, ~/.gitconfig, ~/.config/gh, etc. spécifiques au profil dans ce home.

Hermes expose aussi HERMES_REAL_HOME pour que les scripts puissent toujours trouver le vrai home du compte.


9. Distributions de profils : partager un agent complet

Une distribution de profil package un agent Hermes complet en tant que dépôt git :

my-research-agent/
├── distribution.yaml    # manifeste
├── SOUL.md            # personnalité
├── config.yaml        # configuration
├── skills/            # compétences incluses
├── cron/              # tâches planifiées
└── mcp.json           # serveurs MCP

Installez-le en une commande :

hermes profile install github.com/you/my-research-agent --alias

Puis exécutez :

my-research-agent chat
my-research-agent gateway start

Mettez à jour avec :

hermes profile update my-research-agent

Ce qui n’est pas inclus dans une distribution

  • auth.json, .env et autres secrets ;
  • memories/, sessions/, state.db, logs (données utilisateur) ;
  • checkpoints, backups, caches.

Chacun apporte ses propres clés API et mémoires ; ce qui est partagé, c’est personnalité + compétences + configuration.


10. Gérer les profils

hermes profile list           # lister tous les profils
hermes profile show coder     # voir les détails d'un profil
hermes profile rename coder dev-bot   # renommer (met à jour alias + service)
hermes profile export coder   # exporter vers coder.tar.gz
hermes profile import coder.tar.gz  # importer depuis une archive
hermes profile delete coder   # supprimer (confirmation requise)
hermes profile delete coder --yes  # suppression forcée

Le profil par défaut ne peut pas être supprimé. Pour tout désinstaller, utilisez hermes uninstall.


11. Pièges courants et recommandations

Piège Bonne approche
Traiter un profil comme un bac à sable Les profils isolent l’état Hermes, pas le système de fichiers. Utilisez Docker pour l’isolation des fichiers.
Deux profils partagent un token de bot Chaque plateforme de polling/connexion de chaque profil a besoin de son propre token.
Configurer des plateformes liées à un port sur des profils secondaires en multiplexage Configurez webhook/api_server/feishu/etc. uniquement sur le profil par défaut ; atteignez les autres via /p/<profile>/.
Croire que cwd: "." est le répertoire du profil En backend local, cela signifie le répertoire de lancement ; utilisez un chemin absolu pour fixer un projet.
Fuite de mémoire dans Hermes partagé Créez des profils séparés pour différents usages ; chacun a sa propre mémoire.
Skills désynchronisés après mise à jour hermes update synchronise automatiquement les skills inclus dans tous les profils.

12. Une disposition multi-profil recommandée

Si vous planifiez from scratch, envisagez :

Profil Usage Modèle Toolsets
default Questions générales quotidiennes modèle léger outils de base
coder Code, revue, refactoring modèle de code fort code-wiki, git, docker
writer Documentation, blogs, copy modèle long contexte web, memory
research Recherche, articles, analyse concurrentielle modèle de raisonnement arxiv, web, browser
ops Déploiements, surveillance, CI/CD modèle d’outils fort docker, ssh, cron
personal-bot Assistant personnel Telegram/Discord modèle de chat plateformes gateway

Chaque profil a sa propre personnalité, sa propre mémoire et ses propres clés API. Pas de conflits.


Conclusion

Les profils Hermes ne sont pas simplement “plusieurs comptes”. C’est un système complet d’isolation d’état multi-locataire qui vous permet d’exécuter plusieurs agents spécialisés sur la même machine, chacun avec sa propre identité, sa propre mémoire et ses propres outils.

Quand un Hermes ne suffit plus, ne forcez pas tous les contextes dans une seule session. Prenez deux minutes pour créer un profil. Vous constaterez que vos agents IA deviennent bien plus utiles quand ils ne se battent pas pour un état partagé.