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.Lees overnight-mail (sinds gisteren 17:00)
- 2.Trek GitHub-notificaties op (issues, PR-reviews, mentions)
- 3.Check de agenda van vandaag voor de eerste 4 uur
- 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.
$ 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:
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
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:
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
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.De job-beschrijving is de spec. Geen code om te onderhouden. "Eerste 4 uur" naar "eerste 6 uur" veranderen — beschrijving aanpassen, geen redeploy.
- 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.Delivery is ontkoppeld.
deliver=allbetekent dat je geen 5 verschillende webhooks voor 5 chat-apps hoeft te schrijven. De gateway spreekt al alle 22. - 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.