name: morning-briefing description: "Generate a daily morning briefing: email, calendar, Discord, and news — delivered via voice or Discord DM." user-invocable: true
Morning Briefing
Generate a prioritized daily briefing from all your channels.
Usage: /morning-briefing
ARGUMENTS: $ARGUMENTS
What to gather
Collect from each source (skip any that aren't configured):
Email — Run
gws gmail +triageto get unread inbox. Summarize top 5 by priority. Flag anything urgent.Calendar — Run
gws calendar +agenda --today(table output). If you need JSON for parsing, usegws calendar +agenda --today --format json. List meetings with times. For each: who's attending, what it's about. Flag any travel (flights, OOO).Discord — Read recent messages from
logs/discord-bridge.log(tail ~100 lines). Summarize anything actionable from overnight. Reference channel ID mapping at$SUTANDO_MEMORY_DIR/reference_discord_channels.md. Only surface messages NOT already replied to by the bridge.Pending tasks — Check
pending-questions.mdfor unanswered items. Checktasks/for queued tasks.System status — Run
python3 src/health-check.py. Report any issues.Daily insight — Run
python3 src/daily-insight.py. If it produces an insight, include it at the end of the briefing as "💡 Insight: ..."Friction check — Run
python3 src/friction-detector.py. If friction items found, include as "⚠️ Friction: [count] items need attention" with the top 3.
How to deliver
Format as a concise briefing:
Good morning. Here's your briefing:
📧 Email: [count] unread. [urgent summary]
📅 Calendar: [count] meetings today. [next meeting info]
💬 Discord: [summary of overnight activity]
📋 Tasks: [pending items]
🖥️ System: [health status]
💡 Insight: [behavioral pattern from daily-insight.py, if available]
Deliver via:
- Write to
results/briefing-{date}.txtso the voice agent can speak it - Send via Discord DM if configured
Scheduling
To run daily, add to the proactive loop or use /loop:
/loop 24h /morning-briefing
Or schedule at a specific time via cron.