How the scheduler works
The gateway process checks every 60 seconds whether any jobs are due. When a job fires, the agent runs the task — using all its tools, memory, and skills — and delivers the result to whatever platform you've connected. Telegram, Discord, Email, whoever.
This is different from a standard cron job, which runs a script. Hermes scheduling runs the AI agent. So the 'script' can browse websites, call APIs, read files, do research, and write a structured result. You describe what you want in plain English. The agent figures out how to do it.
The scheduler lives inside the gateway, so it only fires when the gateway is running. On Hermes OS that's handled automatically. Self-hosted: install the gateway as a system service (hermes gateway install) so it starts on boot and restarts after crashes.
Setting up a scheduled task
Simplest method: tell the agent in conversation.
'Every weekday at 8am, send me a Telegram message with today's weather in London and any calendar events I have before noon.'
It creates the schedule and confirms. Check what's scheduled:
For more control, use standard cron syntax — five fields: minute, hour, day of month, month, day of week:
0 8 * * 1-5 # weekdays at 8am
0 18 * * 0 # Sundays at 6pm
*/15 * * * * # every 15 minutes
0 * * * * # top of every hour
If cron syntax is unfamiliar: crontab.guru translates between plain English and cron expressions and shows the next 5 fire times.
Where the results go
Any platform you've connected. Specify the destination when creating the task — one task can go to Telegram, another to Email, another to Discord. The result arrives like a normal message from your bot.
Morning briefing
Most common scheduled task. Common things people put in:
- Weather forecast for the day
- Calendar events
- Unread email count + anything flagged urgent
- News headlines filtered to topics you care about
- Outstanding tasks from your to-do system
- Portfolio snapshot if you track investments
Start with one or two. The agent needs API credentials for each data source (Google Calendar API key, etc.) — it will ask the first time, or you add them to ~/.hermes/.env directly. Once set, they're remembered.
Monitoring and conditional alerts
Scheduled tasks don't have to deliver every time they fire. You can set up tasks that only message you when something notable happens:
'Every 5 minutes: check if my-app.com returns HTTP 200. Message me on Telegram only if it doesn't.'
Or:
'Every morning: check the price of [product]. Message me only if it's dropped since yesterday.'
The agent handles the conditional logic. It fires, does the check, decides whether the result is worth sending. Far more useful than unconditional pings that just create noise.
For server monitoring: the agent can SSH into other servers (with key auth configured), check disk usage, running processes, memory, recent error logs, then send a summary or alert only on problems. The self-hosting guide covers SSH key setup.
Weekly reports
Weekly cadence works for things that aren't urgent but benefit from a regular look:
- GitHub activity — open PRs, issues created this week, commits by author
- Business metrics — weekly revenue, new signups, churn from Stripe
- Content — posts published, word count, analytics from top pages
- Personal — a reflection prompt: what did you actually finish this week?
For business metrics, the agent needs API access to relevant services. Skills are the standard packaging — write the API integration once as a skill, the scheduler calls it weekly without re-explanation.
Managing scheduled tasks
The run command is the most useful during setup — fire the task immediately to see what the output looks like before waiting for the scheduled time. Saves a lot of guessing.
Scheduled tasks live in your profile config. They're included in profile exports and backups — migrate to a new server or to Hermes OS and the schedule comes with you.
A realistic full schedule
What a developer's daily automated schedule might look like:
8:00am (weekdays) — GitHub notifications + weather + calendar events before noon → Telegram
Every 30 minutes (9am–6pm) — ping staging.myapp.io, message me on Telegram only if it returns non-200
Friday 5pm — summarise merged PRs across three repos this week, include author and a one-sentence description of each change → Telegram
Sunday 7pm — check Notion task list, list everything still open from last week, ask: what's the one most important thing for this week? → Telegram
None of this requires writing code. You describe what you want. The agent works out how.