Tutorial Automation

Hermes Cron in de praktijk: een dagrapport dat om 8 uur in Telegram landt

Hermes Agent

Hermes Agent

@hermesagents

May 17, 2026

8 min lezen

De cron-scheduler van Hermes Agent is de derde grote vorm van agent-werk, na beurt-voor-beurt-chat en /goal-loops. Met cron draait de agent onbeheerd op een schema, met aflevering naar welk messaging-platform je ook wilt — of naar allemaal tegelijk via deliver=all (#21495).

Deze post bouwt één concrete job — een dagrapport in de ochtend — en gebruikt die om uit te leggen hoe de scheduler echt werkt. Hetzelfde patroon dekt nachtelijke backups, weekelijkse security-audits, on-call-meldingen, of wat je anders in een broze bash + cron zou plakken.

Wat we bouwen

Elke werkdag om 8 uur:

  1. 1.Lees overnight-mail (sinds gisteren 17:00)
  2. 2.Trek GitHub-notificaties op (issues, PR-reviews, mentions)
  3. 3.Check de agenda van vandaag voor de eerste 4 uur
  4. 4.Vat alle drie samen tot één Telegram-bericht

Is er iets belangrijks gebeurd, dan is het bericht uitgebreid. Is er niets gebeurd, dan is het bericht één zin: "Rustige nacht. Agenda licht tot 11."

Stap 1: de job definiëren

hermes cron add loodst je erdoor. De CLI vraagt om: een naam, een schema, de job-beschrijving (natuurlijke taal) en delivery-targets.

bash
$ hermes cron add
Name: daily-morning-report
Schedule (cron expression or natural language): 0 8 * * MON-FRI
Description: |
  Read overnight email (since 5 PM yesterday).
  Pull GitHub notifications via the github skill.
  Check today's calendar via google-calendar for the first 4 hours.
  Summarize all three into one Telegram message.
  Be brief when nothing important happened.
Delivery: telegram

0 8 <em class="italic text-slate-200"> </em> MON-FRI is standaard cron-syntax: minuut 0, uur 8, elke dag van de maand, elke maand, maandag tot en met vrijdag. Hermes accepteert zowel cron-syntax als lossere natuurlijke-taal-formuleringen als "every weekday at 8 AM".

Stap 2: wat draait er om 8 uur

De volgende werkdag om 8 uur opent Hermes een geïsoleerde agent-sessie met:

  • De job-beschrijving als initial user-bericht
  • Welke skills de agent ook besluit aan te roepen (email, github, google-calendar)
  • Een delivery-hook die het uiteindelijke antwoord naar Telegram pipet

Geen persistente context, geen typende user. De agent leest de beschrijving, roept de skills aan, schrijft een bericht, stuurt het. Meestal 15–30 seconden klaar.

De output verschijnt in Telegram als bericht van jouw Hermes-bot. Duurde de job langer dan gebruikelijk of liep hij tegen een error, dan krijg je op hetzelfde kanaal ook een error-bericht.

Stap 3: deliver=all — uitwaaieren naar elk platform

Default gaat delivery naar één platform — degene die je bij cron add opgaf. Wil je dat het rapport overal landt waar je bereikbaar bent, zet dan:

bash
hermes cron edit daily-morning-report --deliver all

Nu gaat het bericht naar elk gekoppeld messaging-platform tegelijk — je Telegram, Discord, Slack, WhatsApp, Signal, LINE, SimpleX, wat je ook hebt geconfigureerd. v0.14.0 bedrade de per-platform-delivery voor cron expliciet (#21495).

Wanneer dit nuttig is: je wilt garantie dat je het bericht ziet, ongeacht in welke app je toevallig zit.

Wanneer dit overdreven is: je checkt 's ochtends maar één platform. Kies die.

Stap 4: zien wat er gepland staat

bash
hermes cron list

Laat alles wat gepland staat zien, de volgende run-tijd, de status van de laatste run. v0.14.0 voegde naam-gebaseerde lookup toe voor job-operaties (#26231), dus je kunt jobs op naam in plaats van ID refereren:

bash
hermes cron logs daily-morning-report --last 5
hermes cron disable daily-morning-report
hermes cron run-now daily-morning-report  # direct triggeren, off-schedule

Wat gebeurt er als een job faalt

Cron-jobs draaien in hun eigen sandbox-sessie (dezelfde backends als interactieve Hermes — zie het sandbox-backends-stuk). Faalt een skill-call, dan krijgt de agent de error en probeert het opnieuw of rapporteert het netjes.

Crasht de hele job (de agent zelf valt om), dan stuurt Hermes een melding op je default messaging-platform met de error en een link naar de logs. Het session-durability-werk van v0.13.0 zorgt dat een gateway-restart geen pending cron-leveringen verliest — de dedupe gaat via atomaire claim met rewind bij falen (#23401).

Een paar nuttige echte jobs

Dit zijn patronen die mensen ook echt draaien:

Nachtelijke backup-verificatie. Cron om 3 uur 's nachts: lijst backup-snapshots, check dat die van vandaag bestaat en niet-leeg is, faal luid als die ontbreekt. deliver=all zodat je wakker wordt met de fout als hij er is.

Wekelijkse security-audit. Cron zondag 22 uur: trek dependency-advisories op, scan je lockfiles op bekende CVE's, vat nieuwe kwetsbaarheden samen. De supply-chain advisory checker van v0.14.0 (#24220) maakt dit netter dan DIY-scripts.

On-call-handoff. Cron vrijdag 17 uur: lees de pages van deze week, schrijf een paragraaf-overdracht naar de on-call van volgende week. Lever af op het gedeelde Slack-kanaal.

Watchers (de v0.14.0-skill #21881). Poll een RSS-feed, een HTTP-JSON-endpoint of een GitHub-repo op veranderingen; meld alleen wanneer er iets veranderde. Gecombineerd met cron wordt dit "meld me wanneer X verandert", een van de meest onderbenutte automatisering-primitieven.

Waar de logs heen gaan

bash
hermes cron logs daily-morning-report

Default de laatste 10 runs. Elk toont: timestamp, duur, welke skills werden aangeroepen, wat werd afgeleverd, wat faalde indien iets. Logs leven onder ~/.hermes/cron/logs/ en roteren automatisch.

Waarom dit beter is dan een shell-script

Je zou hetzelfde dagrapport kunnen schrijven als bash-script + cron + curl-naar-Telegram + misschien een klein LLM-call. Veel mensen hebben dat ook gedaan.

Waarom cron-op-een-agent interessant is:

  1. 1.De job-beschrijving is de spec. Geen code om te onderhouden. "Eerste 4 uur" naar "eerste 6 uur" veranderen — beschrijving aanpassen, geen redeploy.
  2. 2.Skills componeren. "Check ook Linear op nieuwe tickets erbij" is één zin in de beschrijving. In een shell-script is het een nieuwe API-client.
  3. 3.Delivery is ontkoppeld. deliver=all betekent dat je geen 5 verschillende webhooks voor 5 chat-apps hoeft te schrijven. De gateway spreekt al alle 22.
  4. 4.Errors zijn debuggable. Faalt een job, dan vertelt de agent je wat hij probeerde en waarom het faalde, in mensentaal. Bash-scripts geven je exit code 1.

Dat maakt agent-cron niet altijd het juiste antwoord — voor jobs die 100% deterministisch moeten zijn en in 30 ms moeten draaien, is een shell-script nog steeds beter. Maar voor "doe rond dit tijdstip iets doordachts en vertel me erover" is cron-op-Hermes het schoonste gereedschap in de kist.

Verder lezen

Abonneer op updates

Community-updates over Hermes Agent-releases, nieuwe vaardigheden en integraties. Geen spam, altijd opzegbaar.