How I use AI on Hermes to keep track of our plans
(ai, hermes, automation, google-calendar, telegram) 3 min read by Bartosz Pachołek
A Hermes agent on a small machine at home posts our plans for the day to Telegram at 7:30 and adds calendar events when I ask, with the AI kept out of the daily part.
Every morning at 7:30 a message arrives in a small private Telegram channel we have at home, called "Nasze plany" ("our plans"). It lists what is in our shared calendar for today and what is coming tomorrow. Nobody types it. It comes from Bober, the AI assistant I run on Hermes Agent on a small machine at home.
This post shows how that works, what the AI does, and what it deliberately does not do.
The setup
Hermes Agent is an open-source AI agent from Nous Research. I run it on a low-power Intel Celeron machine with Ubuntu. It talks to me through a Telegram bot and uses a Claude model from Anthropic for the thinking. I call it Bober, which is Polish for beaver.
Most days Bober works on GitHub for me: it turns issues I label into draft pull requests and reviews code when I ask. The calendar is its newest job.
Connecting the calendar, and nothing else
Our household plans live in a Google Calendar we share. To let Bober read it, I created my own Google Cloud project with the Calendar API and a desktop OAuth client, and signed in once. The app asks for two scopes and no more:
calendar.readonly, to see the calendars and their events;calendar.events, to add an event when I ask for one.
No Gmail, no Drive, no contacts. The refresh token stays on the machine in a file that only my user account can read, and the sign-in ends on a localhost address, so there is no public server anywhere waiting for tokens.
The client is a single Python script that uses only the standard library. It lists events, adds and deletes them, and formats the morning message.
The 7:30 message is not AI at all
The morning post is the part I rely on most, so I kept the model out of it. Hermes' scheduler runs a plain script: it reads today and tomorrow from the calendar, formats them in Polish and posts them to the channel through the Telegram Bot API. No prompt, no tokens spent, and no chance of an appointment the model made up.
A made-up example of what arrives:
☀️ Dzień dobry! Dziś piątek, 30 października.
Plany na dziś:
• cały dzień: Urodziny babci
• 17:00–18:00: Basen
📅 Przypomnienie na jutro (sobota, 31 października):
• 10:00–12:00: Zakupy na weekend
🦫 ~Bober
Two details took more thought than the code:
- Time zones. The machine's clock runs on UTC, and Warsaw switches between UTC+1 and UTC+2. The job runs at 05:30 and 06:30 UTC, and the script posts only when it is between 07:20 and 11:00 in Warsaw, at most once a day. So the message comes at 7:30 in winter and in summer, and if the machine was off at 7:30, it still goes out later that morning.
- Errors. When something fails, for example Google refusing the token or Telegram being down, the error comes to my private chat with Bober and never to the shared channel.
Adding plans is where the AI helps
Adding things is where a language model is useful. I write to Bober the way I would write to a person: "add the dentist on Friday at 10". Bober works out which Friday that is in Warsaw time, checks the day for clashes or a duplicate, and shows me exactly what it is about to add: the title, the day, the time, the place and the calendar. Nothing is written until I say OK. Then it adds the event and replies with a link to it. Moving or deleting an event works the same way, always after I confirm.
The confirmation step is deliberate. A model can misread "next Friday", and a wrong event in a shared calendar is worse than no event at all.
What I would keep if I built it again
- The repeatable daily part is plain code; the model only handles the conversation.
- Google gets asked for the narrowest scopes that do the job.
- Tokens stay on my own machine, readable only by the account that needs them.
- The assistant shows what it is going to write and waits for a yes.
A private tool
This setup is for me and my family. The Google app behind it is not offered to anyone else, and nobody else should sign in to it. The terms and the privacy policy explain why, and what the app could access if you did.