Agent Skills: Morning Briefing Workflow

Generate comprehensive morning briefing with calendar, tasks, tickets, news, and weather. Saves to Obsidian, sends email with audio podcast attached.

UncategorizedID: krishagel/geoffrey/morning-briefing

Install this agent skill to your local

pnpm dlx add-skill https://github.com/krishagel/geoffrey/tree/HEAD/skills/morning-briefing

Skill Files

Browse the full folder contents for morning-briefing.

Download Skill

Loading file tree…

skills/morning-briefing/SKILL.md

Skill Metadata

Name
morning-briefing
Description
Generate comprehensive morning briefing with calendar, tasks, tickets, news, and weather. Saves to Obsidian, sends email with audio podcast attached.

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)

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)

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)

# 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

bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/list_tickets.js '{"workspace_id": 2, "filter": "new_and_my_open"}'

Returns open tickets assigned to or created by user in Technology workspace.

1.5 Pending Approvals

bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/get_approvals.js requested

Returns service requests awaiting approval.

1.6 Weather

Use WebSearch:

Gig Harbor WA weather today forecast

Extract:

  • Current conditions
  • High/low temperature
  • Precipitation chance
  • Any alerts

1.7 EdTech News (with Synopses)

Use WebSearch:

K-12 education technology news past 24 hours January 2026

For each article found (3-5 articles):

  1. Use WebFetch to read the full article
  2. Extract a 2-3 sentence synopsis covering:
    • What happened / what's new
    • Why it matters for K-12 education
    • Key takeaway or action item

Freshness check: Verify article dates before including. Only include articles published within the last 24 hours. Skip older articles even if they appear in results.

Topics to cover:

  • EdTech product launches and updates
  • School technology policy changes
  • Cybersecurity in schools
  • Digital learning trends

1.8 AI News (with Synopses)

Use WebSearch:

artificial intelligence news past 24 hours January 2026 latest

For each article found (3-5 articles):

  1. Use WebFetch to read the full article
  2. Extract a 2-3 sentence synopsis covering:
    • What's the development
    • Industry impact
    • Relevance to education/work

Freshness check: Verify article dates before including. Only include articles published within the last 24 hours. Skip older articles even if they appear in results.

Topics to cover:

  • Major AI model releases and capabilities
  • AI policy and regulation
  • Enterprise AI adoption
  • AI research breakthroughs

1.9 K-12 Leadership News (with Synopses)

Use WebSearch:

K-12 school leadership superintendent news past 24 hours January 2026

For each article found (2-3 articles):

  1. Use WebFetch to read the full article
  2. Extract a 2-3 sentence synopsis covering:
    • Policy or leadership development
    • Impact on districts/schools
    • Relevance to CIO/technology leadership

Freshness check: Verify article dates before including. Only include articles published within the last 24 hours. Skip older articles even if they appear in results.

Topics to cover:

  • State and federal education policy
  • Superintendent and board news
  • School funding and budgets
  • Workforce and staffing trends

1.9b School Safety & Security News (with Synopses)

Use WebSearch:

K-12 school safety security news past 24 hours January 2026

For each article found (3 articles):

  1. Use WebFetch to read the full article
  2. Extract a 2-3 sentence synopsis covering:
    • What happened / what's new
    • Impact on school safety practices
    • Key takeaway for districts

Freshness check: Verify article dates before including. Only include articles published within the last 24 hours. Skip older articles even if they appear in results.

Topics to cover:

  • School security incidents and responses
  • Safety policy changes
  • Emergency preparedness
  • Mental health and threat assessment
  • Physical security technology

1.10 Technology Team EOD Messages (Last Business Day) - DETAILED

Get end-of-day check-in messages from the Technology Staff space:

cd /Users/hagelk/non-ic-code/geoffrey/skills/google-workspace && bun chat/get_eod_messages.js psd spaces/AAAAxOtpv10 last-business-day

CRITICAL - NO HALLUCINATION:

  • ONLY use names that appear in the sender field of the script output
  • If script returns no messages, say "No EOD messages found"
  • If script returns messages with sender IDs instead of names, display the ID (e.g., "users/12345...")
  • NEVER invent names, locations, or accomplishments
  • Copy-paste approach: treat script output as source of truth

Before extracting team data:

  1. Examine the raw JSON output from the script
  2. List the exact sender values returned
  3. Use ONLY those names - no paraphrasing, no "improving"

CRITICAL: Extract FULL details from each team member's EOD message. Look for messages that contain "Today:" prefix - these are the detailed EOD summaries.

For each team member who posted an EOD summary:

  1. Name: Who posted (use EXACTLY the name from sender field)
  2. Location(s): Where they worked (WFH, DCRC, school sites)
  3. Key accomplishments: Specific tasks completed (not just "tickets")
  4. Notable items: Interesting problems solved, projects worked on
  5. Issues/blockers: Any problems mentioned

Example extraction from raw message:

Brad White:
- Location: TSD (Tech Services)
- Accomplished: Packaged Cinema 4D plugin for deployment, fixed OAuth blocking for Maxon App sign-in, created SwiftDialog notification for plugin installs, used Claude Code for first time to create Installomator label for Godot game engine
- Notable: Working on Unity deployment troubleshooting, burning comp time leaving early

Note: If today is Monday, "last business day" = Friday (or Thursday if Friday was a holiday).

1.10b Safety & Security Team EOD Messages (Last Business Day)

Get end-of-day check-in messages from the Safety & Security Staff space:

cd /Users/hagelk/non-ic-code/geoffrey/skills/google-workspace && bun chat/get_eod_messages.js psd spaces/AAAAFpQaAnA last-business-day

Space: PSD Safety & Security Team

CRITICAL - NO HALLUCINATION:

  • ONLY use names that appear in the sender field of the script output
  • If script returns no messages, say "No EOD messages found"
  • If script returns messages with sender IDs (e.g., "users/12345...") instead of names:
    • Display as: Unknown (users/123456...) - [Location from message content]
    • Add note: "Name not in mapping - update chat_user_mapping.json"
  • NEVER invent names, locations, or accomplishments
  • Copy-paste approach: treat script output as source of truth

Before extracting team data:

  1. Examine the raw JSON output from the script
  2. List the exact sender values returned
  3. Use ONLY those names - no paraphrasing, no "improving"

Extract using same format as Technology Team - names, locations, accomplishments, issues.

Note: If today is Monday, "last business day" = Friday (or Thursday if Friday was a holiday).

1.11 Team Completed Tickets (Last Business Day)

Get tickets closed by the Technology team on the last business day:

# First get the last business day
LAST_BIZ_DAY=$(bun /Users/hagelk/non-ic-code/geoffrey/skills/morning-briefing/scripts/get_last_business_day.js | jq -r '.date')

# Then get daily summary for that date
bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/get_daily_summary.js "$LAST_BIZ_DAY"

CRITICAL - NO HALLUCINATION:

  • ONLY use agent names that appear in the byAgent section of script output
  • Use EXACTLY the ticket counts returned by the script
  • NEVER invent names or ticket counts
  • If an agent's name shows as ID or email, display it as-is

Before reporting ticket stats:

  1. Examine the raw JSON output from get_daily_summary.js
  2. List the exact agent names from byAgent field
  3. Use ONLY those names and counts

Returns:

  • Total tickets closed
  • Breakdown by agent
  • Breakdown by category (Password Reset, Chromebook, etc.)
  • Automated vs agent-resolved

Workspace: Technology (workspace_id: 2)

1.12 Ticket Trends Analysis

Compare last business day to previous days for trends:

# Get last 5 business days of summaries for trend analysis
# The get_daily_summary.js script supports date parsing
bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/get_daily_summary.js "last monday"
bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/get_daily_summary.js "last tuesday"
# etc.

Analyze for:

  • Volume trends (increasing/decreasing)
  • Category spikes (sudden increase in specific issue types)
  • Agent workload distribution
  • Unusual patterns

1.13 Software Development Workspace Tickets

Get open tickets in the Software Development workspace:

bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/search_tickets.js "status:2 OR status:3" 13

Returns all open (status:2) and pending (status:3) tickets in the Software Development workspace.

Workspace ID: 13 (Software Development) Note: This is the user's internal software development bug tracker for AI Studio and other PSD applications.

1.14 Legislative Activity (Last Business Day)

Get K-12 education bills with activity since the last business day:

# Get lookback info and bills to check
bun /Users/hagelk/non-ic-code/geoffrey/skills/legislative-tracker/scripts/get_recent_bill_activity.js --last-business-day

This returns:

  • Date range to check (last business day β†’ today)
  • List of ~143 confirmed education bill IDs
  • WebFetch instructions for each bill

Workflow:

  1. Get the output from get_recent_bill_activity.js
  2. WebFetch each bill URL (batch 5-6 in parallel for speed)
  3. Extract latest action date from each bill page
  4. Filter to bills where latest_action_date >= lookback_start
  5. Apply priority framework (HIGH/MEDIUM/LOW based on district impact)
  6. Include summary of what each bill does

On Monday: Lookback starts on Friday (or earlier if Friday was a holiday), so includes all weekend activity (hearings, votes, committee actions).

Example URLs to WebFetch:

  • https://app.leg.wa.gov/billsummary?BillNumber=1020&Year=2025
  • https://app.leg.wa.gov/billsummary?BillNumber=5038&Year=2025

Note: Only include bills that actually had activity. If no bills moved, output "No legislative activity since [date]".

Phase 2: Generate Briefing

2.1 Analyze & Prioritize

Review gathered data and identify:

  • Conflicts: Overlapping calendar events
  • Urgencies: Overdue tasks, high-priority tickets
  • Themes: Patterns across data sources

2.2 Format Markdown Briefing

Use this structure:

# Daily Briefing - [DATE]

## Weather
[Current conditions, high/low, precipitation]

## Today's Calendar
| Time | Event | Location |
|------|-------|----------|
| ... | ... | ... |

**Conflicts/Notes**: [any issues]

## Priority Tasks
### Due Today
- [ ] Task 1
- [ ] Task 2

### Flagged
- [ ] Task 3

### Overdue
- [ ] Task 4 (due [date])

## Recent Emails (Last 24h)
[X emails in inbox from last 24 hours]

### Needs Response
- From: [sender] - [subject] (snippet)
- From: [sender] - [subject] (snippet)

### FYI/Notifications
- [sender] - [subject]

## Freshservice
### Technology Tickets: [count] open
[Top 3-5 tickets by priority/age]

### Software Development Tickets: [count] open
[List tickets in Software Dev workspace]

### Pending Approvals: [count]
[List with ticket #, requester, summary]

## Team Activity (Last Business Day: [DAY, DATE])

**Data Source Verification (REQUIRED):**
- Technology EOD script returned: [X] messages from [list exact sender names from JSON]
- Safety & Security EOD script returned: [X] messages from [list exact sender names from JSON]
- Freshservice daily summary returned: [X] tickets by [list exact agent names from JSON]

*Use ONLY the names listed above. Never invent or paraphrase names.*

### Technology Team EOD Summaries

**[Name from sender field]** - [Location(s)]
- [Key accomplishment 1 - be specific about what they did]
- [Key accomplishment 2]
- [Notable: any interesting problems solved or projects]

**[Name from sender field]** - [Location(s)]
- [Key accomplishment 1]
- [Key accomplishment 2]
- [Issues: any blockers or problems mentioned]

*[Continue for each team member who posted an EOD summary]*

### Safety & Security Team EOD Summaries

**[Name from sender field]** - [Location(s)]
- [Key accomplishment 1]
- [Key accomplishment 2]
- [Notable: any issues or incidents handled]

*If sender shows as user ID (users/12345...), display: **Unknown (users/12345...)** - [Location]*

*[Continue for each team member who posted an EOD summary]*

### Tickets Completed by Team: [count]
| Agent | Tickets | Top Categories |
|-------|---------|----------------|
| [Name from byAgent field] | X | Password Reset (Y), Chromebook (Z) |

### Ticket Trends
- Volume: [up/down/stable] vs previous days
- Notable patterns: [any spikes or anomalies]

## EdTech News

### [Article Title 1] - [Source]
[2-3 sentence synopsis: what happened, why it matters, key takeaway]

### [Article Title 2] - [Source]
[2-3 sentence synopsis]

### [Article Title 3] - [Source]
[2-3 sentence synopsis]

## AI News

### [Article Title 1] - [Source]
[2-3 sentence synopsis: what's the development, industry impact, relevance]

### [Article Title 2] - [Source]
[2-3 sentence synopsis]

### [Article Title 3] - [Source]
[2-3 sentence synopsis]

## K-12 Leadership News

### [Article Title 1] - [Source]
[2-3 sentence synopsis: policy/leadership development, impact, relevance to tech leadership]

### [Article Title 2] - [Source]
[2-3 sentence synopsis]

## School Safety & Security News

### [Article Title 1] - [Source]
[2-3 sentence synopsis: what happened, impact on safety practices, takeaway for districts]

### [Article Title 2] - [Source]
[2-3 sentence synopsis]

### [Article Title 3] - [Source]
[2-3 sentence synopsis]

## Legislative Activity ([Last Biz Day] - Today)

[X] education bills had movement:

### πŸ”΄ HIGH Priority

#### [Bill ID] - [Short Title]
**Action**: [What happened - hearing, vote, committee action, etc.]
**Summary**: [1-2 sentences: what the bill does, potential district impact]

### 🟑 MEDIUM Priority

#### [Bill ID] - [Short Title]
**Action**: [What happened]
**Summary**: [1-2 sentences]

### 🟒 LOW Priority
- [Bill ID]: [Action type] - [One line summary]

*No legislative activity since [date]* - if no bills moved

## Quick Stats
- Calendar events: X
- Tasks overdue: X | Due today: X | Flagged: X
- Open tickets (Tech): X
- Open tickets (Software Dev): X
- Pending approvals: X
- Recent emails (24h): X
- Team tickets closed [last biz day]: X
- News articles: EdTech (X) | AI (X) | Leadership (X)
- Legislative bills with activity: X

2.3 Generate Podcast Script (Extended Format)

Transform the briefing into a comprehensive conversational audio script:

  • First person, casual professional tone
  • 10-15 minutes speaking time (~1500-2000 words)
  • Address listener directly ("Here's what you need to know today...")

Required Sections (in order):

  1. Opening (~100 words)

    • Day, date, weather summary
    • Quick preview of key items
  2. Calendar & Schedule (~150 words)

    • Today's events with context
    • Highlight key meetings/events
    • Note any conflicts or prep needed
  3. Tasks & Priorities (~150 words)

    • Overdue items that need attention
    • Due today items
    • Flagged priorities
  4. Tickets & Service Desk (~150 words)

    • Open Technology tickets
    • Software Development tickets
    • Pending approvals
  5. Team Activity - DETAILED (~400 words)

    • What the Technology team accomplished on last business day
    • Highlight 3-5 team members by name with specifics
    • Notable projects, interesting problems solved
    • What the Safety & Security team accomplished
    • Overall ticket closure stats

    CRITICAL - NO HALLUCINATION:

    • Use ONLY names from the script output sender fields
    • Use ONLY ticket counts from the get_daily_summary.js output
    • If script returned no messages, say "No EOD messages were posted"
    • NEVER invent names, locations, or accomplishments
  6. EdTech News (~200 words)

    • 2-3 articles with synopses
    • Why each matters for K-12
  7. AI News (~200 words)

    • 2-3 articles with synopses
    • Industry impact and relevance
  8. K-12 Leadership News (~150 words)

    • 1-2 articles with synopses
    • Policy/leadership implications

8b. School Safety & Security News (~150 words)

  • 2-3 articles with synopses
  • Safety practices and district implications
  1. Legislative Update (~150 words)

    • Bills that had hearings, votes, or readings since last business day
    • Highlight any with direct district impact (fiscal, operational, staffing)
    • Note upcoming hearing dates if relevant
    • On Mondays, include weekend activity summary
  2. Closing (~100 words)

    • Top 3 priorities for the day
    • Sign off

Style Guidelines:

  • Use team members' first names when discussing their work
  • Include specific details (not "worked on tickets" but "resolved 34 Chromebook repairs")
  • Transition smoothly between sections
  • Add brief commentary/analysis on news items

Save to /tmp/morning_briefing_podcast.txt

Phase 3: Create Podcast

uv run --with mlx-audio --with pydub /Users/hagelk/non-ic-code/geoffrey/skills/local-tts/scripts/generate_audio.py \
  --file /tmp/morning_briefing_podcast.txt \
  --voice af_heart \
  --output ~/Desktop/morning_briefing_[DATE].mp3

Voice Selection: af_heart (warm, friendly - good for morning briefing) Note: Uses local MLX TTS (Kokoro model) - no API costs

Phase 3.5: Generate Infographic (MANDATORY)

CRITICAL: The infographic MUST be generated. Do not skip this phase.

Create a visual summary infographic using the image-gen skill.

3.5.1 Build Infographic Prompt

Based on gathered data, construct a prompt for the infographic:

Create an infographic summarizing a daily work briefing for [DATE].

Visual concept: A clean dashboard layout with distinct sections for different data categories.

Key data to display:
- Weather: [conditions], High [X]Β°F, Low [Y]Β°F
- Calendar: [X] events today, highlight: [key meeting]
- Tasks: [X] overdue, [Y] due today, [Z] flagged
- Tickets: [X] Technology open, [Y] Software Dev open
- Team Activity: [X] tickets closed by team yesterday
- Emails: [X] in inbox from last 24h

Style: Professional, clean design with PSD brand colors (navy blue #003366, gold accent #FFD700).
Flat design, clear sections, modern sans-serif typography.

Layout: Horizontal 16:9, organized as a dashboard with weather top-left, calendar top-right,
tasks and tickets in middle row, team stats at bottom.

Title: "Daily Briefing - [DATE]"
Subtitle: "Gig Harbor, WA"

3.5.2 Generate Image

uv run /Users/hagelk/non-ic-code/geoffrey/skills/image-gen/scripts/generate.py \
  "[infographic prompt]" \
  ~/Desktop/morning_briefing_[DATE].png \
  16:9 \
  2K

Settings:

  • Aspect ratio: 16:9 (landscape dashboard)
  • Size: 2K (ensures text readability)
  • Output: ~/Desktop/morning_briefing_[DATE].png

Phase 4: Save to Obsidian

4.1 Copy Infographic to Obsidian Assets

cp ~/Desktop/morning_briefing_[DATE].png \
  ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/Personal_Notes/Geoffrey/Daily\ Briefings/assets/

4.2 Add Infographic to Briefing Markdown

At the top of the briefing (after the title), add:

![Daily Briefing Infographic](assets/morning_briefing_[DATE].png)

4.3 Save Briefing File

Use Obsidian MCP tools:

  1. Check if daily note exists:

    mcp__obsidian-vault__get_vault_file
    filename: "Geoffrey/Daily Briefings/[YYYY-MM-DD].md"
    
  2. Create or update:

    mcp__obsidian-vault__create_vault_file
    filename: "Geoffrey/Daily Briefings/[YYYY-MM-DD].md"
    content: [full briefing markdown with infographic embed]
    

File path pattern: Geoffrey/Daily Briefings/YYYY-MM-DD.md

Fallback (if MCP unavailable): Write directly to iCloud path:

/Users/hagelk/Library/Mobile Documents/iCloud~md~obsidian/Documents/Personal_Notes/Geoffrey/Daily Briefings/[YYYY-MM-DD].md

Phase 5: Send Email (HTML with Inline Infographic)

5.1 Generate HTML Email Body

Create a professional HTML email (NOT markdown). Use the template at skills/morning-briefing/templates/email.html as reference.

Key HTML structure:

<!DOCTYPE html>
<html>
<head>
  <style>
    body { font-family: -apple-system, BlinkMacSystemFont, sans-serif; max-width: 600px; margin: 0 auto; }
    .header { text-align: center; border-bottom: 2px solid #003366; padding: 16px; }
    .stat-box { background: #f8f9fa; padding: 12px; text-align: center; }
    /* ... more styles from template ... */
  </style>
</head>
<body>
  <!-- Infographic at TOP - referenced via cid:briefing_image -->
  <img src="cid:briefing_image" alt="Daily Briefing" style="width: 100%; max-width: 600px; border-radius: 8px; margin-bottom: 20px;">

  <div class="header">
    <h1 style="color: #003366;">Daily Briefing</h1>
    <p>[DAY_OF_WEEK], [DATE_FORMATTED]</p>
  </div>

  <!-- Weather, Stats, Calendar, Tasks, Team, News sections -->
  <!-- See templates/email.html for full structure -->

  <div style="background: #e8f4f8; padding: 16px; border-radius: 8px; margin-top: 20px;">
    <strong>Attachments:</strong><br>
    🎧 Audio Podcast (~10-15 min)<br>
    πŸ“Š Infographic (also shown above)
  </div>

  <p style="text-align: center; color: #666; font-size: 12px;">
    Full briefing: Obsidian/Geoffrey/Daily Briefings/[DATE].md
  </p>
</body>
</html>

CRITICAL: The <img src="cid:briefing_image"> displays the infographic inline at the top of the email.

Save to /tmp/morning_briefing_email.html

5.2 Send with Inline Image + Attachments

cd /Users/hagelk/non-ic-code/geoffrey/skills/google-workspace && bun gmail/send_with_attachments.js psd \
  --to "hagelk@psd401.net" \
  --subject "Daily Briefing - [DATE]" \
  --body-file /tmp/morning_briefing_email.html \
  --html \
  --inline-image "~/Desktop/morning_briefing_[DATE].png" \
  --attachments "~/Desktop/morning_briefing_[DATE].mp3"

Options explained:

  • --html - Treat body as HTML (required for formatting)
  • --inline-image - Embeds image at top of email (referenced as cid:briefing_image)
  • --attachments - Additional files to attach (podcast)

Result:

  • Infographic displays INLINE at top of email (visible without downloading)
  • Podcast attached for download
  • Email renders nicely in Gmail with professional styling

Output

Return standardized summary:

## Summary
Generated daily briefing for [DATE]

## Actions
- Gathered calendar events: X
- Gathered tasks: X (Y due today, Z flagged)
- Gathered Technology tickets: X open, Y approvals pending
- Gathered Software Dev tickets: X open
- Gathered team EOD messages: X from [last business day]
- Gathered team completed tickets: X from [last business day]
- Weather: [conditions]
- News: X headlines
- Generated podcast: ~/Desktop/morning_briefing_[DATE].mp3
- Saved to Obsidian: Geoffrey/Daily Briefings/[DATE].md
- Email: [sent/skipped - reason]

## Status
[Status emoji] [Complete/Partial]

## Quick View
[2-3 line summary of most important items]

Error Handling

Missing Google Workspace Scripts

If calendar/email scripts don't exist:

  • Skip those sections
  • Note "Integration pending" in output
  • Continue with available data sources

OmniFocus Not Running

Status: Partial
Note: OmniFocus not running - task data unavailable

Freshservice API Error

Status: Partial
Note: Freshservice API error - ticket data unavailable

Local TTS Generation Failed

Status: Partial
Note: Audio generation failed - check mlx-audio setup
Briefing saved to Obsidian without podcast

Dependencies

| Skill/Tool | Required For | Fallback | |------------|--------------|----------| | google-workspace | Calendar, email, team EOD | Skip sections | | omnifocus-manager | Tasks | Skip section | | freshservice-manager | Tickets, approvals, team stats | Skip section | | local-tts | Audio podcast | Text-only briefing | | obsidian-vault (MCP) | Save briefing | Display only | | WebSearch | News, weather | Skip sections |

Configuration

User Preferences

  • Location: Gig Harbor, WA (weather)
  • Work Email: psd account
  • Technology Workspace: workspace_id: 2
  • Software Dev Workspace: workspace_id: 13
  • Technology Chat Space: spaces/AAAAxOtpv10 (Technology Staff Check-Ins & Logs)
  • Safety & Security Chat Space: spaces/AAAAFpQaAnA (PSD Safety & Security Team)
  • Voice: af_heart (warm, friendly - local Kokoro TTS)
  • Podcast Length: 10-15 minutes (~1500-2000 words)

Customization

Users can request:

  • "Skip news" - omit news section
  • "No podcast" - text only
  • "Just calendar and tasks" - minimal briefing