--- name: morning-briefing description: Generate comprehensive morning briefing with calendar, tasks, tickets, news, and weather. Saves to Obsidian, sends email with audio podcast attached. triggers: - "morning briefing" - "daily briefing" - "start my day" - "what's on today" disable-model-invocation: true allowed-tools: Read, Write, Bash, WebSearch, WebFetch, mcp__obsidian-vault__* version: 1.4.0 --- # 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": 2, "filter": "new_and_my_open"}' ``` Returns open tickets assigned to or created by user in Technology workspace. ### 1.5 Pending Approvals ```bash 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: ```bash 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: ```bash 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: ```bash # 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: ```bash # 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: ```bash 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: ```bash # 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: ```markdown # 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 9. **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 10. **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 ```bash 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 ```bash 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 ```bash 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: ```markdown ![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: ```bash /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:** ```html Daily Briefing

Daily Briefing

[DAY_OF_WEEK], [DATE_FORMATTED]

Attachments:
🎧 Audio Podcast (~10-15 min)
📊 Infographic (also shown above)

Full briefing: Obsidian/Geoffrey/Daily Briefings/[DATE].md

``` **CRITICAL:** The `` displays the infographic inline at the top of the email. Save to `/tmp/morning_briefing_email.html` ### 5.2 Send with Inline Image + Attachments ```bash 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: ```markdown ## 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