A complete recipe for an agent that pulls your calendar every weekday morning, identifies conflicts and focus blocks, and sends a structured summary to Slack or email.
A daily standup agent can pull your calendar every weekday morning, identify conflicts and gaps, and send a structured summary to Slack or email before you open your laptop. This is a practical recipe that actually works. No abstractions, no hand-waving.
Every weekday at 8am (or whenever you want), the agent:
This is the prompt the agent runs each morning. It is opinionated. Adjust for your own preferences.
You are a daily standup assistant. Today is {DATE}. My timezone is America/Los_Angeles.
Step 1: Pull my calendar for today through end of this Friday using list_events.
Also pull tomorrow's calendar separately so you have tomorrow's schedule in full detail.
Step 2: Analyze the week:
- List ALL events today in chronological order (time, title, duration, any notes)
- Flag any conflicts: events that overlap or leave less than 10 minutes between them
- Find focus blocks: gaps of 90+ minutes with no meetings
- Flag events that likely need prep: demos, code reviews, external calls, syncs with
"agenda TBD" or no description
Step 3: Write a standup summary in this format:
--- TODAY ({DATE}) ---
[List events in order. Flag conflicts with ⚠️]
Focus time: [available blocks or "none"]
Prep needed: [events that need work beforehand, or "none"]
--- THIS WEEK (highlights) ---
[Key events Wed-Fri that are worth flagging: deadlines, external meetings, anything heavy]
--- CONFLICTS TO RESOLVE ---
[List any overlapping events or impossible back-to-backs]
Keep it under 300 words. Be direct. Do not pad with commentary.If you are using Claude Code, you can run the standup script from a cron job:
# standup.sh
#!/bin/bash
DATE=$(date +"%Y-%m-%d")
TODAY=$(date +"%A, %B %d")
PROMPT="You are a daily standup assistant. Today is $TODAY ($DATE)...
[paste full prompt above]"
RESULT=$(echo "$PROMPT" | claude --print --permission-mode bypassPermissions)
# Send to Slack
curl -s -X POST "$SLACK_WEBHOOK_URL" -H "Content-Type: application/json" -d "{"text": "```$RESULT```"}"
# Or send via email
# echo "$RESULT" | mail -s "Standup $DATE" you@youremail.comAdd to cron:
# crontab -e
# Run at 8am Mon-Fri Pacific time
0 8 * * 1-5 /path/to/standup.sh >> /var/log/standup.log 2>&1Make sure Claude Code has CalendarMCP registered as an MCP server (see the Claude Code setup post for that) and the SLACK_WEBHOOK_URL environment variable is set.
If you use OpenClaw, the heartbeat system handles the scheduling without a separate cron job. Add this to your HEARTBEAT.md task list:
| standup | 8am weekdays | Pull calendar, analyze week, send summary to Slack |The heartbeat task file describes what to do, and OpenClaw's scheduling system fires it on the specified cadence. CalendarMCP is already available as a plugin, so the agent has access to calendar tools without additional config.
On Mondays, extend the prompt to pull Monday through Friday explicitly. Mid-week, today through Friday is enough. You can automate this with a day-of-week check in the shell script:
DAY=$(date +%u) # 1=Mon, 5=Fri
if [ "$DAY" = "1" ]; then
LOOKAHEAD="the full week (Mon through Fri)"
else
LOOKAHEAD="today through end of Friday"
fiTell the agent to treat all-day events as context, not as blocking time. Out-of-office events are the exception: if there is an OOO event today, the summary should note it and skip the detailed schedule.
If you have both personal and work calendars, specify both in the prompt: "Pull events from both my personal and work calendars." CalendarMCP handles multi-calendar queries in a single tool call when multiple accounts are connected.
After a week of running this, a typical output looks like:
--- TODAY (Tuesday, May 26) ---
9:00 AM - Eng sync (30 min)
10:00 AM - 1:1 with Alex (45 min)
⚠️ 10:45 AM - Design review (1hr) -- starts 0 min after 1:1, no buffer
12:00 PM - Lunch
2:00 PM - External vendor call (1hr)
4:00 PM - PR reviews async
Focus time: 3:00-4:00 PM (1hr, marginal), none before 2pm
Prep needed: Vendor call at 2pm (no agenda set, check email thread)
--- THIS WEEK (highlights) ---
Wed: Product demo with new prospects (1pm, external)
Fri: Sprint retro (10am) + sprint planning (11am) -- back-to-back 2hr block
--- CONFLICTS TO RESOLVE ---
1:1 with Alex / Design review: 0-min gap Tue 10am-10:45amThat is 200 words, scanned in 30 seconds. The agent pulled six tool calls worth of calendar data and structured it into something actionable.
To set up the calendar access, head to calendarmcp.ai. Connect your Google account, grab the API key, and wire it into your agent of choice. The standup pattern above runs on top of that connection.
Connect your Google Calendar to Claude and any MCP client in about two minutes.
Connect Google Calendar