An agent that runs my morning routine
Every morning, before I sit down to actually work, I do the same dozen things: check the weather, look at the day’s calendar, scan email, check the server health pings, see if any Proxmox VMs rebooted overnight, look at the day’s tasks, check the GitHub notifications, see if any backup failed. None of these are hard. All of them are short. Together they take 30-45 minutes of context switching and they don’t actually do any work.
I built an agent that runs them for me. Here’s how.
The setup
A single Python file at ~/bin/morning.py that:
- Reads my calendar (via the iCal URL) and prints the day’s events
- Pulls the weather for my zip code
- Hits the Proxmox API and reports VM status
- Checks the backup server for last night’s runs
- Pulls the latest GitHub notifications for my repos
- Prints the to-do list from a plain text file
- Compiles all of this into a single text report and emails it to me at 6:30am
The agent is a long shell script wrapped in a small Python entry point. The model is the cheap one. The model doesn’t write any of the API calls. I wrote those. The model reads the output, summarizes it into 3-5 sentences, and adds a “things that need attention” line at the bottom.
What the model is good for here
The model is good at the last step: turning “VM pihole-01 is up, 23 days uptime; VM nas-01 rebooted at 03:14, current uptime 3h17m” into “Everything’s fine. The NAS rebooted overnight. You might want to check why.” Without the model, the report is a wall of text and I have to read it. With the model, the report is a wall of text plus a sentence at the top telling me what actually matters. The wall of text stays so I can drill down. The summary is the speed-up.
What doesn’t work
I tried having the model make decisions. “If a backup failed, try restarting the backup job.” Bad idea. The model will eventually do something irreversible. I added a --decide flag that, when not present, makes the model pure read-only. The flag is off. The model is a summarizer, not an actor. When the model needs to take action, I read the report and run the command myself.
The cost
About $0.04 per morning on the cheap model. I run it 6 days a week. Less than a coffee. The time it saves is real. I sit down at my desk and read a 4-line summary instead of opening 8 tabs. I save 20 minutes and most of my morning anxiety.
The script lives at tannerslab/morning-agent on GitHub. Pull requests welcome. The interesting parts are the part where I had to teach the model what counts as “needs attention” (it kept flagging calendar events that were a week away as urgent) and the part where I had to add explicit “do not run this command” examples in the system prompt after the model tried to rm -rf a directory it thought was stale.