Generates a daily action item wrap-up from your Granola meeting notes and DMs it to you in Slack every evening.
At 5 PM on weekdays, it:
- Reads today's meetings from the local Granola cache
- Calls Claude to extract four categories of action items:
- Todos — tasks you need to do
- Commitments — things you promised to deliver to others
- Decisions — decisions you need to make or drive
- Open questions — unresolved questions that need follow-up
- DMs you the results in Slack
- macOS with Granola installed and signed in
- Python 3 (no third-party packages needed)
- An Anthropic API key
- A Slack app with
chat:write,im:write, andconversations.openscopes
Copy these files alongside your existing sync-granola.py:
generate-daily-actions.py
generate-daily-actions.sh
com.granola-actions.plist.template
install.sh
.claude/skills/daily-actions/SKILL.md
- Go to https://api.slack.com/apps and create a new app
- Under OAuth & Permissions, add bot scopes:
chat:write,im:write,conversations.open - Install the app to your workspace
- Copy the Bot User OAuth Token (starts with
xoxb-) - Get your Slack user ID: Slack > your name > ⋯ > Copy member ID
chmod +x install.sh
./install.shThis creates ~/.granola-actions-env for your credentials and installs the launchd job.
Edit ~/.granola-actions-env:
export ANTHROPIC_API_KEY="sk-ant-..."
export SLACK_BOT_TOKEN="xoxb-..."
export SLACK_USER_ID="U0XXXXXXX"python3 generate-daily-actions.py# Specific date
python3 generate-daily-actions.py 2026-03-23
# Via Claude Code (from the granola-sync directory)
/daily-actions
/daily-actions 2026-03-23~/granola-sync/granola-actions.log
Daily wrap-up — Tuesday, March 24
*Eng sync* _10:00_
✅ To-do
• Unblock Saurabh on Atlas spec by EOD
🤝 Committed to others
• Send updated timeline to Flora by Thursday
🔀 Decisions needed
• Decide on Nick's allocation split between QA and AI research
*1:1 Ahsan* _14:00_
❓ Open questions
• Does CPS pilot scope change require board sign-off?