I Built a 24/7 Agent From Scratch: A Morning Briefing With Hermes Agent
When your laptop shuts down, your agents die too. I built one that doesn’t: it wakes up at half past five every morning, scans X and news sources, and sends a summary to Telegram before I’m up. All on a VPS at Hostinger, with Hermes Agent installed in one click.
1. THE PROBLEM: WHEN THE LAPTOP SHUTS DOWN, THE AGENT DIES
The agents I build with Claude Code live on my computer. When the computer shuts down or goes to sleep, they stop too. But a job like a morning briefing has to run exactly while I’m asleep.
The solution is a VPS: a computer in a data center that is reserved for you and never turns off. When the agent lives there, it keeps working while the laptop is closed. The model doesn’t run on the server, it’s called through an API; so you don’t need a big processor either.
2. THE SYSTEM: THREE SKILLS, ONE BRIEFING
The system has three “skills”. All three are plain Turkish recipes, not code.
- The collector runs every morning via cron: it builds a briefing of at most 10 items from X and RSS sources and sends it to Telegram.
- The analyst runs after every briefing: it compares the new briefing with the last 14 days and writes the recurring, rising and fading topics to a file. It doesn’t send me anything.
- The producer runs only when I ask: it turns the accumulated briefings and analysis into a video idea or an X post and says which days’ briefings it used.
The rule is simple: the only thing that arrives in the morning is the briefing. The system never suggests content on its own. The archive quietly grows in the background, and whenever I want, I make something out of it.
3. FIRST LOCALLY, WITH CLAUDE CODE
I started on my computer. In an empty folder I described the structure to Claude Code: three recipe files, a template for the RSS list, a small script that pulls today’s headlines from RSS, and a folder where the briefings pile up. I set one rule: API keys are read only from the .env file and never written into files.
Then I had it do a dry run: show the briefing preview only to me and send it nowhere. Locally, the X scan worked with the open session in my browser. Below I explain why that won’t work on a server. All the prompts from the video are in the repo, in prompts/PROMPTLAR.md.
4. A VPS AND HERMES AGENT ON HOSTINGER
I use Hostinger for the server. My plan is KVM 2 (2 vCPU, 8 GB RAM). Since the model doesn’t run on the server, I don’t need a big processor, but since it runs 24/7 I didn’t want it cramped either. You can choose 12 or 24 months; the monthly price drops over the longer term, and I picked 24 months. There is a 30-day money-back guarantee.
Installing Hermes Agent is one click: in hPanel you open the server and choose Hermes Agent under Applications. At the end the panel gives you a username and a one-time password; save them, that’s how you log into the Hermes panel. Even if the server restarts, the agent’s memory and skills stay on the persistent disk under /opt/data.
5. MODEL, TELEGRAM AND MOVING THE PROJECT
Model. The Keys page in the Hermes panel lists many providers; I use Anthropic. I created a separate API key just for this agent and put a spending limit on it. For cost, I chose Claude Sonnet 5 as the main model.
Telegram. Hermes connects to Telegram with two pieces of information. The first is the bot token from @BotFather, the bot’s identity. The second is your numeric user ID; with it, only you can talk to the bot. If you type your username in the panel you get a “must be numeric” error; I got it in the video. Connecting via QR didn’t work for me; manual setup is more reliable. After saving you must restart the gateway; only then do the settings take effect. Step by step: the Telegram setup doc.
Project. I zipped the local folder, uploaded it through Files in the Hermes panel and then wrote this in the chat:
There is sabah-brifingi.zip in the home folder. Unzip it, place it, set it up.
This is our new project. Read the recipes under skills/ and
summarize in one sentence what they do.The agent unzips it, reads the recipes, and the skills show up on the Skills page.
6. THE MORNING CRON
This is the actual job. On the Cron page in the Hermes panel I created a new job: name “Sabah Bildirimi” (morning notification), every day at 05:30, delivered to Telegram. The prompt:
Run the collector skill (skills/toplayici.md). Prepare today's
briefing, save it under data/briefings/ and send me only the
briefing text on Telegram. Run the analyst but don't send the analysis.To test it without waiting for the first run, you can type the same prompt into the chat. If the briefing arrives, the cron will work too. When the cron runs, the result lands in the bot as a message; I don’t have to type anything. If I want, I can also ask the archive questions from Telegram, like “which topics came up again this week, turn that into an X post”.
When the setup is done, I go through this checklist:
- Keys: the Anthropic and OXYLABS keys are added.
- Channels: Telegram is connected, the Test button says “Telegram connected”.
- Skills: the collector, analyst and producer are listed.
- Cron: Sabah Bildirimi, 05:30, Telegram.
- The gateway has been restarted.
If the gateway throws errors and a restart doesn’t fix it, I paste the error into the chat and ask Hermes; it can read its own logs. That’s how I solved it in the video too.
7. THE X PROBLEM AND OXYLABS
Locally, the agent scanned X with my open browser session. That can’t move to a server for two reasons. First, there is no open browser session on the server. Second, giving the session of your personal account to an agent running 24/7 ends with the account being suspended. And the read tier of X’s official API is expensive. On the first try the agent found nothing on the server: X’s search page requires a login.
The solution was two tools from Oxylabs AI Studio. AI-Search sends site:x.com plus topic keywords to a search engine and collects real tweet links; single tweet pages don’t require a login. AI-Scraper opens each link one by one and extracts the text, author and date. Because the search engine also returns old tweets, the date filter is applied inside the script and each X item in the briefing shows its date. That’s also why the section is called “X’te konuşulanlar” (what people are talking about on X).
I didn’t paste the Oxylabs key into the chat; I added it on the Keys page in the Hermes panel under the name OXYLABS, and from there it’s written to the .env file on the server. Details: the X data doc.
8. ADAPT IT TO YOUR NICHE
You choose the sources. Replace the addresses in RSS.txt and the search axes in the collector recipe (“AI agents”, “Claude Anthropic”, “yapay zeka”) with your own field; the rest stays the same.
Project files, prompts and setup: github.com/selmakcby/hermes-sabah-brifingi. Server setup in order: the VPS setup doc. The self-improving Instagram agent team I later built on the same server is here.