This post was originally published on my Substack publication as How My Hermes Agent Plans My Morning Before I Have My Coffee.
You probably start every morning the same way most people do. Phone in hand. Six apps open before you finish your coffee. Email, task manager, Slack, calendar, news feed, Substack digest. Each one wants your attention. Each one claims urgency.
By the time you reach actual work, your best mental energy is already spent. You made dozens of tiny decisions about what to open, what to read, and what to ignore. Your real work gets the leftovers.
The problem is not discipline. The fire hose of inputs hits you the second you wake up, and no amount of willpower fixes a broken system.
I stopped trying to fix my habits and started fixing how information reaches me. Now one cronjob gathers my Asana tasks and hands me one clear decision to start the day. A second cronjob runs twice daily, checks Gmail for Substack articles, and sends me a curated digest email. I read the briefing in 30 seconds. The two hours come from fewer context switches, less reactive mode, and a single first action instead of a dozen tiny decisions.
Follow along as we build both systems in three layers. Layer 1 takes 15 to 20 minutes and covers the Asana morning briefing. Layer 2 adds the Substack digest email that runs twice daily. Layer 3 extends the briefing to Slack, Jira, GitHub, or any service with an API. Start wherever you want as each layer is useful on its own.
What we will cover:
- Why checking multiple apps each morning burns your best energy before work even starts
The four-section briefing structure that replaces a to-do list with a decision
Step-by-step setup for the Asana briefing and the Substack digest email
How to extend the briefing to any API-driven tool you already use
Keeping both systems from bloating into useless noise
You Are Not Lazy, Just Constantly Interrupted
You are exhausted before 9 AM, and the reason has nothing to do with laziness.
Gloria Mark at UC Irvine studied this for years. Her research found that after an interruption, it takes an average of 23 minutes and 15 seconds to return to deep focus on the original task. Not to finish it. Just to get back into it. If you check email, then Slack, then your calendar, then a task list, then a news feed, you end up losing over an hour in refocus time alone.
The Adobe Email Usage Study found that Americans spend over five hours per day checking work and personal email combined. We spend hours refreshing inboxes. Actual communication barely happens. We train ourselves to react to whatever arrives instead of deciding what matters.
Inbox zero reinforces this pattern. It teaches you to treat every incoming message as equally urgent. The newsletter you subscribed to in 2019 gets the same mental weight as a client asking about a deadline. Your morning becomes a sorting exercise for other people’s priorities.
CEOs and important people have secretaries who sift through everything before it reaches them. We have AI agents like Hermes and Openclaw that can do this for us, maybe even better than the average person.
Here is how I built the one system that gathered everything in my pipeline and made one recommendation to get my day started.
What an Actually Good AI Briefing Looks Like
A good briefing works as a decision support document. It replaces your basic to-do list.
Most people think a morning briefing means listing everything they need to do today. That approach creates anxiety instead of clarity. A list of 15 tasks leaves you feeling behind instead of showing you where to start.
My briefing has four sections. Each one stays capped at 2 to 3 bullets. It ends with one forced decision. Without that final gate, the briefing becomes another scrollable feed you skim and forget.
Here is the structure:
Today — Meetings, deadlines, hard commitments that cannot move.
Tasks — Open items from Asana, sorted by impact, not by order added.
Alerts — Unread emails from humans, not newsletters. Overdue items that need attention.
One Decision — The single action that would make the rest of the day easier.
The Today section tells me what time is already spoken for. The Tasks section tells me what I chose to work on. The Alerts section catches anything that slipped through. The One Decision section forces me to think instead of consume.
I have seen people build briefings with ten sections. Weather, stock prices, news headlines, calendar, tasks, emails, social mentions, fitness data. That approach builds a dashboard, and dashboards serve monitoring. Briefings serve decision-making.
If your briefing takes longer than 3 minutes to read, trim a source. Tighten a filter. Clarity matters more than completeness.
Layer 1: Build Your First Briefing in 20 Minutes
Start with one source. Asana works well because you already put your commitments there. If your Asana is messy, the briefing will reflect that mess. Spend 10 minutes cleaning due dates and priorities first. The cronjob cannot organize what you have not organized. If your task manager lacks structure, that cleanup step becomes your first priority before automating anything.
What you need:
An Asana account, free tier works
Your Asana personal access token
Hermes with cron support
Prerequisites:
An Asana account (sign up here)
Your Asana personal access token (get one here)
Asana API docs for reference: developers.asana.com/docs or the Asana MCP server if you prefer MCP over REST
Hermes with cron support
Everything else happens inside the prompt. Hermes handles the API calls, the sorting, and the formatting. You do not write code or configure endpoints. You paste the prompt, set a schedule, and the cronjob does the rest.
Here is the exact prompt I give my cronjob:
You are my Morning Briefing Agent. Your job is simple: help me start the day with clarity instead of chaos.
Every morning at 8:15 AM Bucharest time, run this routine:
1. Pull my open tasks from Asana using the asana API or CLI
2. Sort them by: due date (overdue first), priority, project
3. Identify my top 3 highest-impact tasks for today
4. Flag anything overdue or due today
5. Format everything into a 2-minute briefing
The briefing structure:
---
TODAY'S BRIEFING — [Date]
TODAY:
- [Meetings/deadlines from tasks]
TOP 3 TASKS:
1. [Highest impact task] — [Project] — Due: [Date]
2. ...
3. ...
ALERTS:
- [Overdue items]
- [Items due today]
ONE DECISION:
What is the one task I should finish first to make everything else easier?
---
Keep each section to 2-3 bullets. No fluff. No summaries of summaries. Just the signal.
Paste that prompt directly into your Hermes chat, whether through Telegram or the TUI. Hermes handles the API calls, the sorting, and the formatting. Set a schedule with the cronjob tool, point the delivery at your chat or email, and run it once to verify the output.
Here is what the actual output looks like on a typical morning:
TODAY'S BRIEFING — April 22, 2026
TODAY:
- 10:00 AM — Client sync call (Project Alpha)
- 3:00 PM — Article draft deadline
TOP 3 TASKS:
1. Finish API integration for client proposal — Client Work — Due: April 22
2. Review pull request #25 — Open Source Project — Due: April 23
3. Update Substack draft for next week — Substack — Due: April 25
ALERTS:
- "Design mockups feedback" task overdue since April 20
- "Invoice March services" due today
ONE DECISION:
Finish the API integration before the 10 AM call so you have something concrete to discuss.
That is it. Twenty minutes. One source. One clear read every morning.
If you have read Hermes Is the AI Agent OpenClaw Promised to Be, you know why the cron architecture matters. This briefing runs on the same backbone. If you have not set Hermes up yet, The $30 Hermes Stack That Makes Claude Max Look Like a Ripoff walks through the full stack.
Know someone who checks six apps before breakfast? Forward this to them.
Layer 2: The Substack Digest Email
The morning briefing covers your tasks. Your newsletters need a separate system. I run a second cronjob that checks Gmail for Substack article emails twice a day on weekdays, at 9:15 AM and 4:15 PM. It reads each article, summarizes it, and sends me a formatted digest email. This is not part of the Telegram morning briefing. It is a separate pipeline with a different output and a different schedule.
What you need:
The gws CLI tool for Google Workspace integration
A Gmail account where Substack sends your digests
gws is a command-line tool that connects Hermes to Google Workspace, including Gmail. You install it once, authenticate with your Google account, and the cronjob gains read-only access to your inbox.
Here is the cronjob prompt I use:
Check Gmail for new Substack article emails and deliver a nicely formatted digest to your email, only covering emails received since the last check.
## Step 1: Check Gmail for new Substack articles
1. Read the last run timestamp from a tracking file. If it doesn't exist, use 24 hours ago as the cutoff.
2. List Substack emails: gws gmail +triage --query "from:*@substack.com" --max 20
Note: Substack emails arrive already marked as read, so do NOT use is:unread.
3. For each message, read it with gws gmail +read --id <message_id> to get the email Date header. Compare against the last run timestamp. Skip anything received AT or BEFORE the last run time. Only process emails received AFTER.
4. Filter out non-article emails (follower notifications, subscriber alerts, live video announcements).
5. For each new article in the time window:
a. Extract the article URL from the email body
b. Fetch the full article via markdown.new: curl -sL "https://markdown.new/http://<article_url>"
c. Generate a short 2-3 sentence summary
d. Determine if FREE or PAID by checking for paywall text
## Step 2: Output Format
Compose a formatted email digest with this exact structure:
📬 Substack Digest — [Day, Month DD, YYYY]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🆓 Article Title
by Author Name
Summary: 2-3 sentences covering the core argument and why it matters
🔗 Article URL
🔒 Article Title (PAID — subscriber only)
by Author Name
Summary: 2-3 sentences covering the core argument and why it matters
🔗 Article URL
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Use 🆓 for free articles and 🔒 for paid ones. Keep it clean and scannable.
## Step 3: Deliver
1. Send the digest via gws gmail +send to your email
2. Write the current time to the tracking file for the next run
If no new articles found, respond with [SILENT].
The digest runs twice daily because Substack articles arrive throughout the day. The morning catch covers overnight posts. The afternoon catch covers everything published during work hours. Each run only processes articles received since the last check, so you never see duplicates.
Here is what a typical digest looks like:
📬 Substack Digest — Tuesday, April 21, 2026
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🆓 Computer agents are going mainstream
by Jonas Braadbaart (The Circuit)
Summary: Examines the gap between AI adoption and actual agent deployment, arguing that individual operators are the ones closing the gap rather than enterprise teams. Practical look at how solo builders are using agents for real workflows.
🔗 https://thecircuit.substack.com/p/computer-agents-mainstream
🔒 Claude Managed Agents Review
by Creators AI
Summary: Testing managed agent workflows and comparing them to self-hosted alternatives. Covers setup complexity, cost trade-offs, and when managed services actually save time.
🔗 https://creatorsai.substack.com/p/managed-agents
🆓 Don Quixote and the Sorrowful Algorithm
by Farida Khalaf (Lights On)
Summary: Literary essay on AI narrative inevitability using Don Quixote as metaphor. Explores how algorithmic storytelling converges on predictable patterns despite different prompts.
🔗 https://lightson.substack.com/p/don-quixote-sorrowful-algorithm
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Trade-off: You are giving your cronjob email access. Start with read-only permissions. Never give it send permissions until you have run this for a month and trust the output. The agent reads. You decide. That boundary matters.
Layer 3: Plug in Slack, Jira, GitHub, or Anything with an API
The morning briefing can pull from more sources besides Asana. The same cronjob that checks your tasks can also query Slack, Jira, GitHub, or any service with an API.
What you can add:
Slack: Unread DMs or mentions from specific channels
Jira: Tickets assigned to you, overdue sprints
GitHub: PRs waiting for review, assigned issues
Notion: Database items flagged for review
Any API: If it has an API, Hermes can query it
How to add a new source:
- Get an API token for the service.
Add the token to your Hermes project environment.
Add one step to the cronjob prompt: “Pull my open items from [service].”
Add a section to the briefing template.
Test once, then schedule.
Trade-off: More sources means more noise. I recommend adding one source per week and watching the signal-to-noise ratio. If the briefing gets longer than 30 seconds to read, trim something.
The pattern stays consistent across every source. Token in environment. One new step in the prompt. One new section in the output. You do not need to rebuild the system. You just expand it.
I run Asana for tasks and GitHub PRs for code review items. That is my sweet spot. Anything more and the briefing starts to feel like work before I have finished my coffee.
Information Without Action Is Just Noise
The cronjob’s final instruction in every layer is the same: “At the end, identify the ONE decision or action that would make the rest of the day easier.”
This prevents the briefing from becoming another scrollable feed. It forces me to think, not just consume.
You read the briefing. You nod. You close it. You open your laptop and immediately forget what you just read. The information felt useful, but it did not change what you did next. The One Decision gate fixes this problem. Skip it and the briefing loses its purpose. The One Decision is the entire point.
Some days the decision is obvious. “Finish the client proposal first so the deadline stops hanging over me.” Other days it is strategic. “Block two hours for deep work before opening Slack, or the day will get stolen.” Either way, I start with a clear intention instead of a reactive scan.
Here are real One Decisions from my last week:
“Reply to the contract email before noon so the other side does not stall waiting for us.”
“Merge the PR before the afternoon standup so the team can proceed with testing.”
“Write the article outline first because the blank page anxiety blocks everything else.”
This is where the human-in-the-loop approach from article 005 on approval gates matters. The cronjob drafts. You approve. The system does not replace your judgment. It surfaces information so your judgment has something to work with.
The briefing is a draft. You review it. The cronjob does not act without you.
How to Keep Your Briefing Brief
Most people give up because the briefing becomes useless fast. Here are the three breakdowns I have seen, and how to fix each one.
1. Too much noise
Filter out newsletters, automated alerts, and low-priority senders. In Asana, use sections, tags, or due dates to surface only what matters. In email, filter by sender, not just unread status. If your briefing includes a GitHub notification about someone starring a repo you contributed to in 2022, your filters are too loose.
2. Stale priorities
Update your project memory bank weekly. Five minutes. Review and tweak the prompt monthly, or the briefing drifts into generic summaries. The tasks you cared about in January differ from the tasks you care about in April. Your briefing should reflect that shift.
3. Cronjob goes stale
If you stop reading the briefing, the cronjob will keep sending it. It becomes inbox clutter. Pause the schedule. Fix the output. Resume. Do not let automation become noise you ignore. The system only works if you trust it enough to read it.
I review my briefing prompt on the first Monday of each month. Five minutes. I check whether the sections still match what I need, whether any source has gotten too noisy, and whether the One Decision question still forces useful answers. Those five minutes save me from a month of useless briefings.
Less Cognitive Load Is the Real Payoff
Time saved is a side effect. The actual benefit comes from removing decision fatigue.
I no longer open email first thing. I start with my own priorities. The two hours come from fewer context switches, less reactive mode, and clearer first actions. Moving between working and getting the right things done requires that shift in how you begin the day.
Before the briefing, my morning involved a series of small decisions about what to check next. After the briefing, my morning involves one decision about what to do first. Everything else follows from there.
The system has rough edges. Some days the cronjob misses context. Some days the One Decision misses the mark. The results still beat the chaos I dealt with before, and every prompt tweak makes it sharper.
The architecture behind this is straightforward. One cronjob. Four sections. One forced decision. Each source adds a single API call and a single template section. The complexity lives in the filters, not the infrastructure.



Top comments (0)