2026-06-24 12:45 — Explaining Conflicting Morning Updates
Explaining Conflicting Morning Updates
Session log · 2026-06-24 12:45 → 2026-06-24 14:21
📊 Session Stats
| Metric | Value |
|---|---|
| Source | whatsapp |
| Model | glm-5-turbo |
| Duration | 1h 36m |
| Messages | 174 |
| Tool calls | 84 |
| API calls | 130 |
| Tokens (in/out/reason) | 392,740 / 22,464 / 0 |
| End reason | compression |
🔧 Tools Used
terminal×76skill_view×5cronjob×3
💬 Key Exchanges
👤
I got two morning updates at 11 am pk time. In one you said you have no access to Google calendar or tasks. In the other you have access. Check and see why you can't access in one and tell me why I'm getting two
🤖
Found it. Two separate issues here:
Why two updates: You've got two cron jobs that both deliver morning-style reports to WhatsApp:
1. Morning Briefing (03690474722e) — runs at 0 6 * * * UTC = 11:00 AM PKT ✓
2. Dojo Overnight Improvement (394bbd064009) — runs at 0 1 * * * UTC = 6:00 AM PKT
The Dojo actually ran at 6 AM your time, so unless there was a delivery delay, these shouldn't have landed together at 11. But regardless — they're both sending reports.
**Why Cale...
👤
No i got both at 11 am pk time. You must be reading the wrong one. The first one with everything working starts with good morning omair and the second broken one starts with cronjob response morning brief job id 03690474722e
🤖
Ah, I see the issue now. You're getting the Morning Briefing delivered twice — once as the clean response ("GOOD MORNING OMAIR") and once as the raw output file with all the metadata/prompt included ("Cron Job: Morning Briefing, Job ID..."). Same job, two deliveries.
Let me check why that's happening.
🤖
Now I see the delivery flow. It delivers
final_response(just the agent's output). Let me check the_deliver_resultfunction and also see iforigindeliver is somehow causing double delivery.
🤖
Now I understand the delivery mechanism. It only delivers once via
_deliver_result. The wrapping adds a header "Cronjob Response: Morning Briefing (job_id: 03690474722e)" around the content. But the user says they got TWO messages — one clean "GOOD MORNING OMAIR" and one raw with the prompt metadata.
Let me check if there's something else that sends the output file, or if deliver=origin somehow triggers both a WhatsApp AND a local delivery that the user sees differently.
🤖
Now let me look at what
save_job_outputsaves — that's what becomes the.mdfile the user might be seeing as the second message.
🤖
So
save_job_outputsaves the fulloutput(which includes prompt + response metadata). And_deliver_resultsends thefinal_response(just the agent's clean output). These are two separate things.
The question is: why did the user receive BOTH? Let me check if there's something that also sends the saved output file. Let me look at the output variable vs final_response.
🤖
OK, now I see the full picture clearly. The
outputvariable (which gets saved to the.mdfile) includes the prompt, metadata, and response. Thefinal_responseis just the agent's clean output.
The delivery sends final_response wrapped with "Cronjob Response: Morning Briefing (job_id: 03690474722e)".
But the user said one message starts with "GOOD MORNING OMAIR" (unwrapped) and the other starts with "Cronjob Response..." (wrapped). That means the wrap_response setting is being app...
🤖
Wait — I just realized something. The user said the first message starts with "GOOD MORNING OMAIR" and has working calendar/tasks. But the saved output file for today's run shows the agent COULDN'T fetch calendar/tasks. So maybe the "good" message isn't from this job at all, or it's from a DIFFERENT session.
Let me check if there's an active conversation session that was generating a morning briefing independently.
🤖
Now I see — the MCP servers (Google Calendar, ClickUp, etc.) ARE running as separate processes. The Morning Briefing prompt asks the agent to call
mcp_gcal_calendar_list_eventsetc. But the cron job hasenabled_toolsets: ["web", "terminal", "messaging", "calendar", "tasks", "email", "weather", "prayer", "news"]— it does includecalendarandtasks. So the MCP tools SHOULD be available.
The question remains: why did the agent say "Could not fetch — Google Calendar MCP not available"? ...
🤖
The code only delivers
final_response(or error) — NOT the saved.mdfile. So there shouldn't be a second delivery from this code path.
Let me think about this differently. The user said they got two messages. One clean "GOOD MORNING OMAIR" that had calendar/tasks working, and one "Cronjob Response: Morning Briefing (job_id: 03690474722e)" that had the errors.
But the saved output shows the agent got errors. So where did the clean one come from? Maybe the agent ran TWICE — perhaps the ...
🤖
Only one output file for today. So the job only ran once from the scheduler's perspective.
Wait — the user said the first message started with "GOOD MORNING OMAIR" and had working calendar/tasks. But the only saved output shows the broken version. This means the clean message with working calendar/tasks might not be from the Morning Briefing cron at all.
Actually, let me reconsider. Maybe the deliver=origin path delivers the message, AND the origin is somehow a session that ALSO has the...
🤖
I see only ONE delivery:
delivered to whatsapp:170170932830388@lid via live adapter. And the agent log shows the cron job usedglm-5-turbo(not glm-5.2), with only 3 API calls and 2 tool turns. It completed at 06:01:49.
The agent only delivered once. So where did the second message come from? Let me check if there's a gateway-level delivery that also sends the output.
🤖
Interesting! The cron job ran with
glm-5.2first but got 429 errors (rate limited), then it retried and the second attempt usedglm-5-turboas fallback. The 429s happened at 06:00:40 and 06:00:44.
But there's still only one delivery logged. Let me look at the full agent log around that time for any other activity.
🤖
Key finding: the agent log shows only one delivery to WhatsApp for this job. And the MCP tools for weather, prayer, and news DID work — but looking closely, I notice the agent called
mcp_weather_weather_now,mcp_prayer_*,terminal(for email),web_search,mcp_news_*,web_extract— but NOTmcp_gcal_calendar_list_eventsormcp_clickup_get_workspace_tasks.
The agent had 1791 MCP tools available but simply didn't call the calendar and ClickUp ones — likely because glm-5-t...
🤖
No gateway log entries between 01:14 and 07:45 — meaning the gateway log doesn't show the cron delivery. The cron delivery bypasses the gateway log (it goes through
live adapterdirectly).
But I only see ONE delivery in the agent log. Let me look at the WhatsApp bridge logs more carefully and also check if there's a Discord delivery happening simultaneously.
🤖
Only one delivery. OK, let me reconsider — maybe the user received two WhatsApp messages that were parts of a single delivery split by WhatsApp, or maybe the user is confusing the wrapped header with a separate message.
The wrapped delivery would look like:
Cronjob Response: Morning Briefing
(job_id: 03690474722e)
-------------
GOOD MORNING OMAIR — Wednesday, June 24, 2026
...
And the agent response itself starts with "GOOD MORNING OMAIR". So perhaps the user is seeing the `wrap_r...
👤
You've reached the maximum number of tool-calling iterations allowed. Please provide a final response summarizing what you've found and accomplished so far, without calling any more tools.
🤖
OK here's what I found after digging through the logs and source code:
Two messages: The agent log shows only ONE delivery for the Morning Briefing — delivered to whatsapp:170170932830388@lid via live adapter at 06:01:49. No second delivery was logged anywhere. This makes me think you may have received a single WhatsApp message that was long enough to visually split into two bubbles on your phone, where the first bubble showed the clean "GOOD MORNING OMAIR" content and the second start...
👤
[The user sent an image~ Here's what I can see: This image is a screenshot of a WhatsApp conversation with the contact "Omair Aslam (You)" (a self-chat, indicated by "Message yourself"). The interface has a dark theme with green message bubbles, and the background features subtle, light-colored icons (e.g., clocks, hearts, planets) as a pattern. Here’s a detailed breakdown:
1. Top Bar & Header
- Contact Info: At the top, the header shows "Omair Aslam (You)" with the subtitle...
🤖
Now I can see exactly what's happening. Those are two completely different messages from two different sources:
Message 1 ("☀️ Good morning, Omair!") — This is NOT from the Hermes Morning Briefing cron job. Look at the format: it says "Today at a glance", mentions specific ClickUp tasks ("Share The Ibex Platform and Automation Strategy" for Waseem), family medical appointments for Ammi/Abbo, dermatology setup, Groq data sharing — all very specific, synthesized data. The Hermes Mornin...
👤
How would i know. And it's probably not composio. Use glm 5.2 and check thoroughly and comprehensively. Don't make assumptions
🤖
There it is. Line 2 of the crontab:
0 6 * * * /home/ubuntu/.hermes/custom-mcp/.venv/bin/python /home/ubuntu/.hermes/custom-mcp/morning_brief.py >> /home/ubuntu/.hermes/logs/morning-brief.log 2>&1
A second morning briefing script — morning_brief.py — running at the exact same time (0 6 * * * = 11:00 AM PKT) as the Hermes cron job. That's your "☀️ Good morning, Omair!" message. Two separate morning briefings, two scripts, same schedule.
🤖
Found it. Here's the full picture:
Two separate morning briefings, both at 0 6 * * * UTC (11 AM PKT):
-
morning_brief.py(standalone Python script in your crontab) — sends the "☀️ Good morning, Omair!" message. This is a custom script you wrote that directly calls Google Calendar, Google Tasks, ClickUp API, weather, prayer, email, news — no MCP, no Hermes agent involved. It also sends an HTML email and posts to Discord. It ran successfully today. -
**Hermes Morning Briefing cro...
🔗 Related Notes
Auto-generated by session_logger.py · Hermes — Reference