Generate comprehensive morning briefing with calendar, tasks, tickets, news, and weather. Saves to Obsidian, sends email with audio podcast attached.
View on GitHubFebruary 3, 2026
Select agents to install to:
npx add-skill https://github.com/krishagel/geoffrey/blob/main/skills/morning-briefing/SKILL.md -a claude-code --skill morning-briefingInstallation paths:
.claude/skills/morning-briefing/# Morning Briefing Workflow
## Overview
Generates a daily morning briefing and delivers it three ways:
1. **Terminal**: Summary displayed immediately
2. **Obsidian**: Full briefing saved to daily note
3. **Email**: Briefing text + audio podcast attachment
## Location
- **Gig Harbor, WA** - Use for weather queries
## Phase 1: Gather Data
Execute these data gathering steps:
### 1.1 Calendar (Today's Events)
```bash
cd /Users/hagelk/non-ic-code/geoffrey/skills/google-workspace && bun calendar/list_events.js psd --today
```
Returns JSON with today's events including:
- Event summary, location, start/end times
- Attendees and response status
- Hangout/meet links
**Account**: Use `psd` for work calendar
### 1.2 OmniFocus Tasks (Due & Flagged)
```bash
osascript -l JavaScript /Users/hagelk/non-ic-code/geoffrey/skills/morning-briefing/scripts/get_due_flagged.js
```
Returns tasks that are:
- Due today or overdue
- Flagged
- Available (not blocked, not deferred to future)
### 1.3 Recent Emails (Last 24 Hours)
```bash
# Get yesterday's date in Gmail query format
YESTERDAY=$(date -v-1d +%Y/%m/%d)
cd /Users/hagelk/non-ic-code/geoffrey/skills/google-workspace && bun gmail/list_messages.js psd --query "in:inbox after:$YESTERDAY" --max 15
```
Returns recent inbox messages with:
- From, subject, date, snippet
- Whether read or unread
- Thread ID for context
- Labels array
**Filtering**: Only show emails still in inbox (not already labeled/processed).
- Emails with custom labels (Label_XXXXX) have been sorted and should be excluded
- Exception: Include emails with SaneCC or SaneLater labels (worth knowing about)
- System labels (UNREAD, INBOX, CATEGORY_*, IMPORTANT) don't count as "processed"
**Philosophy**: Any email still in inbox from last 24 hours needs attention, read or not.
**Account**: Use `psd` for work email
### 1.4 Open Freshservice Tickets
```bash
bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/list_tickets.js '{"workspace_id