Tu sais déjà demander une tâche à Hermes. Avec cron, son planificateur, tu peux aussi choisir quand elle démarrera : une seule fois dans quelques minutes, ou selon un rythme régulier.
Nous allons commencer par un essai ponctuel. Hermes devra produire une courte phrase, enregistrée localement. Pas de recherche web ni de notification Telegram : tu pourras d’abord vérifier le trajet complet, de l’échéance au fichier, avant d’y ajouter une vraie routine.
1. Préparer un essai que tu peux observer
Le parcours suppose Linux ou WSL, Hermes installé et un modèle qui répond déjà. Prévois deux terminaux sur la machine qui héberge Hermes, ainsi que quelques minutes pendant lesquelles elle restera allumée et connectée. Un modèle local doit rester disponible lui aussi.
Nous utilisons le profil default. Si tu en utilises un autre, remplace ce nom dans toutes les commandes. Pour comprendre cette séparation, consulte le tuto sur les profils.
Dans le premier terminal, ouvre une conversation :
hermes -p default chat
Vérifie que la réponse contient le repère, puis quitte cette conversation. Si elle échoue, règle d’abord le problème avec le guide d’installation ou le tuto llama.cpp.
La consigne « sans outil » ne désactive pas techniquement les outils. Avant une tâche autonome, vérifie ceux du contexte cron dans hermes -p default tools, comme pour les premiers tools utiles. Notre essai ne nécessite aucun accès web ou fichier par l’agent : Hermes enregistrera lui-même sa réponse.
2. Comprendre ce qui déclenche la tâche
Une tâche planifiée, aussi appelée job, contient notamment une consigne, un horaire et une destination. Dans le parcours local présenté ici, le planificateur du gateway détecte les échéances et lance les tâches dues. Créer le job ne suffit donc pas : ce planificateur doit fonctionner.
Du rendez-vous au résultat
Premier essai · sortie locale
Planifiée ≠ exécutée ≠ résultat validé
L’exécution démarre dans une nouvelle session de tâche. Elle ne reprend pas automatiquement le dialogue que tu viens de quitter. Donne une consigne autonome, même si les réglages du profil, sa mémoire ou des options de continuité peuvent fournir d’autres éléments de contexte. « Reprends ce dont on parlait » serait trop vague.
Le gateway peut assurer cette planification sans que tu configures une livraison Telegram. Ici, local signifie que la réponse est enregistrée sur la machine qui héberge Hermes.
3. Vérifier que le planificateur tourne
Dans le premier terminal :
hermes -p default cron status
Cherche un planificateur actif et un signal récent de son activité, parfois nommé ticker ou heartbeat. Si un gateway fonctionne déjà pour ce profil, conserve-le : ne lance pas un deuxième exemplaire.
Si aucun gateway ne tourne, lance-le au premier plan :
hermes -p default gateway
Dans le second terminal, relance hermes -p default cron status après le démarrage. La documentation indique un passage du planificateur environ toutes les 60 secondes : la tâche ne démarrera pas forcément à la seconde exacte.
Ne poursuis pas si le processus quitte immédiatement ou si aucun signal d’activité n’apparaît. Lis l’erreur et vérifie le profil concerné. Le tutoriel gateway distingue lancement au premier plan et service installé ; un bot de messagerie n’est pas un prérequis à notre sortie locale.
4. Créer une seule tâche dans cinq minutes
Exécute cette commande une seule fois, dans le second terminal. Elle crée un essai nommé « Essai safran-27 », prévu dans cinq minutes, avec une sortie locale :
hermes -p default cron create "in 5m" \
"Réponds uniquement par : Repère safran-27 reçu. N’utilise aucun outil, ne consulte aucun fichier et ne crée aucune tâche." \
--name "Essai safran-27" --deliver local --repeat 1
in 5m signifie une fois dans cinq minutes. Ne le remplace pas par 5m : une durée seule correspond à une répétition dans la syntaxe actuelle. --repeat 1 rend également la limite explicite.
Note l’identifiant renvoyé après Created job, puis vérifie l’enregistrement :
hermes -p default cron list --all
Repère le nom, l’identifiant, l’échéance, la destination local et la limite d’une exécution. Vérifie l’heure et le décalage de fuseau affichés. Si plusieurs essais portent le même nom, utilise leur identifiant pour les distinguer et mets les doublons en pause avant l’échéance.
5. Observer l’exécution et ouvrir son résultat
Laisse passer l’échéance et le passage suivant du planificateur. Garde la machine, le gateway et le modèle disponibles.
Dans la commande ci-dessous, remplace IDENTIFIANT_DU_JOB par l’identifiant réellement obtenu à l’étape 4 :
hermes -p default cron runs IDENTIFIANT_DU_JOB --limit 5
hermes -p default cron list --all
L’historique distingue notamment une tentative en cours (running), terminée (completed), échouée (failed) ou dont l’issue n’est pas établie (unknown). Lis aussi l’état et l’erreur éventuelle de la tâche. L’absence de tentative ne signifie pas que le modèle a échoué : le déclenchement lui-même peut manquer.
Retrouve ensuite le dossier du profil :
hermes profile show default
Dans ce dossier, ouvre cron/output/, puis le sous-dossier portant l’identifiant du job. Le résultat est un fichier Markdown daté. Avec le profil par défaut et sans chemin personnalisé, le chemin habituel est ~/.hermes/cron/output/. Utilise un éditeur ou ton explorateur de fichiers pour lire le fichier correspondant à cet essai.
Le fichier peut aussi contenir des informations d’exécution. Vérifie la phrase produite, l’identifiant et la date : un ancien fichier ou un document contenant une erreur ne valide pas l’essai. L’exemple ci-dessus illustre la réponse attendue, pas une exécution réalisée pour cet article.
6. Terminer l’essai sans perdre ce que tu veux garder
Avec une seule exécution prévue, cet essai n’a pas vocation à se répéter. Confirme son état dans cron list --all.
Pour suspendre un job encore actif ou un doublon, remplace d’abord l’identifiant :
hermes -p default cron pause IDENTIFIANT_DU_JOB
La pause empêche les prochains départs automatiques. Pour arrêter une exécution déjà en cours, la commande distincte est hermes -p default cron cancel IDENTIFIANT_DU_JOB ; elle ne supprime pas sa planification. Vérifie l’état obtenu au lieu de supposer que la pause a arrêté le travail.
Avant de supprimer le job, copie ailleurs son résultat si tu veux le conserver. Dans le code actuel, la suppression retire aussi son dossier de sorties locales. Une fois l’essai relu et la copie éventuelle faite :
hermes -p default cron remove IDENTIFIANT_DU_JOB
hermes -p default cron list --all
Vérifie que cet identifiant n’apparaît plus. Si tu avais lancé le gateway au premier plan uniquement pour cet essai, retourne au premier terminal et presse Ctrl+C, puis attends le retour de l’invite. Conserve un service déjà utilisé pour d’autres tâches ou conversations.
7. Choisir une répétition qui rend vraiment service
Une fois ce trajet compris, remplace le repère par une tâche utile, déjà essayée à la main : un état de service, une veille sur une source précise ou une synthèse de fichiers connus. Définis les accès nécessaires, le format attendu et le moment où tu liras le résultat.
| Ton besoin | Horaire à comprendre |
|---|---|
| Un seul essai dans cinq minutes | in 5m |
| Un passage toutes les six heures | every 6h |
| Un passage à 9 h chaque jour | 0 9 * * * |
Les deux dernières formes sont récurrentes par défaut. Pour un horaire civil, vérifie le fuseau du profil ou fixe celui du job avec --timezone Europe/Paris si c’est bien ton besoin. Commence avec un nombre limité de passages et relis les premières sorties avant de laisser une routine durable.
Une tâche planifiée peut utiliser un autre modèle que ta conversation si des réglages cron ou propres au job le prévoient. Vérifie aussi les outils du contexte cron, les accès et le coût des appels. La complexité d’une tâche n’interdit pas la planification ; elle demande un résultat et des points de contrôle mieux définis.
Pour une livraison Telegram, ajoute ensuite une destination explicite à une messagerie déjà vérifiée. Un résultat produit et un message livré sont deux observations différentes : une erreur de livraison peut laisser un résultat local valide. Le marqueur [SILENT] permet de supprimer une livraison lorsqu’il n’y a rien à signaler ; il n’empêche pas l’enregistrement local.
Retrouver la cause d’un blocage
| Ce que tu observes | Ce que tu vérifies d’abord |
|---|---|
| Le job existe, aucune tentative n’apparaît | Bon profil, échéance, gateway disponible et activité récente du planificateur |
| Le job ponctuel n’a pas démarré après une veille prolongée | Une échéance manquée n’est pas forcément rattrapée ; consulte l’état avant de recréer l’essai |
L’état indique blocked_config | Configuration du modèle, accès et outils signalés dans l’erreur |
La tentative est failed ou unknown | Erreur exacte et éventuels effets déjà produits avant toute relance |
| Un fichier existe, mais son contenu est incorrect | Consigne, modèle et contenu réel du fichier ; le statut technique ne juge pas la réponse |
| Le job ne figure plus dans la liste habituelle | Ajoute --all pour inclure les tâches désactivées ou terminées |
| Le fichier existe, mais aucun message n’arrive | Destination choisie ; local ne demande aucune livraison Telegram |
Un déclenchement manuel avec hermes -p default cron run IDENTIFIANT_DU_JOB peut aider à vérifier la tâche, mais ne valide pas le passage automatique à l’échéance. Une demande de lancement n’est pas non plus un verdict final : consulte l’historique et la sortie. Notre premier parcours attend donc le véritable rendez-vous.
La suite logique
Tu sais maintenant où regarder entre « prévu » et « terminé ». Pour une routine durable, garde un nom reconnaissable, une consigne complète, une fréquence justifiée et un résultat que tu consulteras réellement.
Si plusieurs usages commencent à se mélanger, poursuis avec les profils Hermes. Pour des dépendances entre tâches et des décisions à suivre, le tutoriel Kanban apporte d’autres repères.
Parcours à reproduire ; aucun job ni scénario Hermes n’a été exécuté pour cet article. Documentation et commandes vérifiées le 8 novembre 2026 : cron officiel, commandes CLI et gestion des tâches et de leurs sorties.