In my opinion, one of the more underused Hermes Agent features is built-in scheduling. Your agent can run prompts on a schedule without you typing anything. Morning briefing at 7 a.m. Weekly digest at Friday 5 p.m. A health check every hour. The mechanism is a cron-style scheduler baked into Hermes itself, so you don't need to wire up system cron or write any shell scripts.
I run three scheduled jobs on my personal agent and the cognitive offload is real. The morning email summary catches me up before I've finished coffee. The Friday wind-down asks the agent what's still on my plate going into the weekend. The Sunday backup task rotates skills to my git remote. None of those would happen reliably if I had to remember to trigger them manually.
How Hermes cron differs from system cron
System cron runs shell commands. Hermes cron runs prompts. That distinction matters more than it sounds.
A system cron job that "summarises my unread Gmail" needs you to write a Python script that auths to Gmail, parses messages, formats output, sends an email. A Hermes scheduled prompt that "summarise my unread Gmail and email me the summary" just runs the prompt; the agent figures out the rest using its existing tools and skills.
Same trade-off applies in reverse. System cron is more reliable for tasks that genuinely don't need agent reasoning (rotating logs, restarting services). Hermes cron is the right answer when the task involves judgement: what's important in this inbox, which open issues should I follow up on, what's worth summarising from yesterday.
Adding a scheduled task
The CLI command:
hermes cron add "morning-briefing" \
--schedule "0 7 * * *" \
--prompt "summarise overnight email in three bullets, then email the summary to me"
Breakdown:
"morning-briefing": name (your choice, used for management commands)--schedule: standard cron expression--prompt: what to send to the agent at each scheduled run
The job is now registered. Hermes runs it at the next scheduled time using whatever persona, tools and skills your active profile has configured.
Cron expression reminders
Standard five-field cron, in case it's been a while:
| Field | Range | Example |
|---|---|---|
| Minute | 0-59 | 0 = top of hour |
| Hour | 0-23 | 7 = 7 a.m. |
| Day of month | 1-31 | 1 = first of month |
| Month | 1-12 | * = every month |
| Day of week | 0-6, 0=Sunday | 5 = Friday |
Useful patterns:
0 7 * * *: every day at 7 a.m.0 17 * * 5: every Friday at 5 p.m.*/30 * * * *: every 30 minutes0 9 1 * *: first of every month at 9 a.m.0 */6 * * *: every six hours
If cron expressions hurt your brain, crontab.guru is the reference site to keep open in a tab.
Real examples from my install
Morning briefing
hermes cron add "morning-brief" \
--schedule "0 7 * * 1-5" \
--prompt "Read overnight unread Gmail. Group by sender. Pick the 5 most important. Send me a Telegram message with: senders, one-line summary each, and any direct asks. Mark the rest as read."
Weekdays only (1-5 in the day-of-week field). Telegram is my preferred output channel because I read it before email. The "mark the rest as read" bit happens because the agent has Gmail tool access.
Friday wind-down
hermes cron add "friday-winddown" \
--schedule "0 17 * * 5" \
--prompt "What's still on my plate? Check my todos, my open GitHub issues, my recent messages. Group by 'this weekend' vs 'next week'. Send me a Telegram message."
Same idea, different shape. Output is the same Telegram channel; consistent delivery makes the routine stick.
Sunday skill rotation
hermes cron add "skill-backup" \
--schedule "0 22 * * 0" \
--prompt "Commit the contents of ~/.hermes/skills to my hermes-skills git repo with a dated commit message. Push to origin."
This one's pure automation; no judgement needed. Could be a system cron job too. But keeping it inside Hermes means I can change the schedule from inside the agent chat ("change the skill backup to every Wednesday") without editing crontab files.
Listing, pausing and removing jobs
hermes cron list
hermes cron pause morning-brief
hermes cron resume morning-brief
hermes cron remove friday-winddown
Pause stops the scheduled trigger without deleting the job. Useful when you go on holiday and don't want the morning brief filling your phone.
Where scheduled jobs fail (and what to do about it)
Scheduled prompts fail more silently than interactive prompts. You're not watching. The agent might error, retry, give up and you don't know until Wednesday when you realise you haven't had a morning brief since Friday.
Enable per-job failure notifications
hermes cron add "morning-brief" \
--schedule "0 7 * * *" \
--prompt "..." \
--on-failure-notify telegram
If the job fails three times in a row, Hermes pings you on the channel you specified. Telegram is the right output for "something broke" notifications because it cuts through.
Check the cron log
tail -50 ~/.hermes/logs/cron.log
hermes cron history morning-brief --last 7
The log shows each scheduled trigger, the result and any error. The history command shows the last N runs of a specific job; useful for "did this run at all yesterday".
Common failure modes
The biggest is provider rate limits hitting at unfortunate times. If your 7 a.m. brief runs right as the rest of your gateway is also waking up, you can 429. Mitigation: add 429 to your fallback statuses (see our Hermes 429 rate limit fix) or stagger your cron jobs.
Second is the agent making a wrong tool call when you're not watching to correct it. The "send me a Telegram message" instruction is robust because the agent has done it many times. Vague instructions like "summarise the day" can produce wildly varied output depending on what the agent decided "summarise" meant this time. Be specific.
Costs of scheduled jobs
Each scheduled run costs whatever the underlying prompt costs. A morning brief that reads 30 emails and produces a summary might be 5,000 tokens. At Sonnet pricing, that's a few cents. Times daily = a dollar a month. Cheap if useful.
Where it gets expensive is jobs that run too frequently (every 5 minutes, every hour) without a real reason. Resist the temptation to run "check on my todos" every 30 minutes. Once a day is almost always enough.
If you want to see your scheduled jobs' contribution to spend separately:
hermes usage --by-cron-job --since "30 days ago"
Cost tracking generally lives in our Hermes cost tracking piece.
Cron + Tailscale + a phone notification
The setup I recommend to anyone running Hermes on a VPS:
- Hermes Agent on a Linux VPS with the cron jobs configured
- Tailscale on the laptop and phone (see our Tailscale remote access piece)
- Telegram bot configured as the output channel for cron job notifications
The morning brief lands on your phone via Telegram before you've left the house. The agent doesn't need your laptop to be on. The phone doesn't need to be connected to your home wifi. It just works.
When to use system cron instead
Tasks that don't need agent reasoning: log rotation, certificate renewal, gateway restart timers (see our gateway memory leak fix), backup scripts. These belong in system cron because they're simple shell commands that should run regardless of if the agent is working.
The rule of thumb: if the task could be a 5-line bash script, use system cron. If it needs the agent to think, use Hermes cron.
Multi-step scheduled tasks
One scheduled job can have a multi-step prompt:
hermes cron add "monday-planning" \
--schedule "0 8 * * 1" \
--prompt "First, summarise last week's GitHub commits across my main repos. Then check my calendar for this week, flag any meetings without an agenda. Finally, suggest the three highest-impact things to focus on this week based on what's open. Send all three as separate Telegram messages."
The agent runs each step in sequence, using the appropriate tool for each. This is where Hermes cron earns its keep over system cron.
Hosting cron-driven Hermes on a VPS
Scheduled tasks need the gateway to be running 24/7. WSL2 on a laptop isn't the right host for this (see our WSL2 gateway disconnecting piece for why). A Linux VPS is. The LumaDock Hermes Agent template ships with the gateway under systemd ready for cron jobs to fire reliably. Unmetered bandwidth and no setup fees, which matters for cron jobs that make outbound API calls regularly. Full setup walkthrough in our Hermes Agent complete guide.

