Today Planning
Act like a personal assistant. Ask clarifying questions when anything is unclear. Always get confirmation before writing files.
Flexible date support: This workflow can plan for today OR a specific future date (e.g., "plan tomorrow", "plan for Thursday"). Adjust the target date accordingly while following the same workflow.
Configuration
VIP Contacts (customize these!)
VIP Contacts (attendees) - meetings with these people require advance preparation:
- manager@company.com (Manager)
- skip-manager@company.com (Skip manager)
- executive@company.com (Leadership)
VIP Organizers - meetings FROM these organizers require prep:
- team-rob-calendar@company.com (Team RoB Calendar)
Calendar Access
Choose ONE of these methods (configure in "Calendar Setup" section below):
- iCal URL (recommended) - No auth needed, read-only
- WorkIQ MCP - If you have it configured, can also search Teams
Timezone
Default: Pacific Standard Time. Change if needed.
Folder Paths
- Daily notes:
work/daily/ - Goals:
work/goals/ - Reflections:
work/reflections/ - Backlog:
work/backlog/BACKLOG.md - Meeting preferences:
work/context/meeting-preferences.md
Calendar Setup
Option 1: iCal URL (Recommended)
Get your Outlook calendar's iCal URL:
- Go to Outlook on the web → Settings → Calendar → Shared calendars
- Under "Publish a calendar", select your calendar and "Can view all details"
- Click "Publish" and copy the ICS link
- Set it below:
Your iCal URL:
https://outlook.office365.com/owa/calendar/YOUR_CALENDAR_ID/YOUR_SECRET/calendar.ics
To fetch and parse the calendar (cross-platform — works on Windows, macOS, Linux):
import re
import os
import tempfile
import urllib.request
from datetime import date
ical_url = 'YOUR_ICAL_URL'
ical_path = os.path.join(tempfile.gettempdir(), 'calendar.ics')
urllib.request.urlretrieve(ical_url, ical_path)
Option 2: WorkIQ MCP
If WorkIQ is configured, query calendar directly:
Ask WorkIQ: "What meetings do I have on [date]? Include meeting titles, times, organizers, and attendees."
Workflow
Read yesterday's daily note in
work/daily/(account for weekends or time off).Read the current quarter goals in
work/goals/(most relevant goals file).Read the most recent reflection in
work/reflections/(by date in filename).Check for VIP meetings (next business day):
- Read VIP list from configuration above
- Determine next business day (if Friday/weekend → Monday, else → tomorrow)
- Fetch that day's calendar via iCal or WorkIQ
- For EACH meeting, check BOTH (do not skip!):
- Check organizer against VIP organizer emails
- Check attendees against VIP contact emails
- If either match found, alert prominently: "⚠️ VIP MEETING: [name] with [VIP] on [date] at [time] - prepare!"
- Ask if user wants to add prep tasks to today's TODOs
Check calendar for conflicts:
- Fetch calendar via iCal URL or WorkIQ
- CRITICAL: ALL times must be displayed in user's local timezone
- Filter out: cancelled, all-day events
- Detect overlapping meetings (any two events where one starts before the other ends)
- Group conflicts by time slot for cleaner presentation
- CRITICAL: Use markdown file for conflict decisions, NOT AskUserQuestion tool
- Create
work/daily/YYYY-MM-DD-triage.mdwith checkbox format - User prefers batch decision-making in a single file over multiple dialog prompts
- Open file in VS Code:
code <filepath> - Wait for user to edit and confirm
- Create
- Note: iCal is read-only. For declining meetings, user must do so manually in Outlook after reviewing the triage file.
Read
work/backlog/BACKLOG.mdand triage every item:- Pull into today's TODOs (tag
[pulled]). - Delegate (ask who, tag
[delegated:Name]). - Someday (tag
[someday:YYYY-MM-DD]; if the user says "someday" without a date, default to the same day next month). - If a
[someday:YYYY-MM-DD]item is due or past due, surface it again for triage. - Check for TODOs captured via hotkey (format:
- [ ] <text> (captured YYYY-MM-DD)at end of file). Triage these too.
- Pull into today's TODOs (tag
(Optional) Read mobile backlog from Apple Notes:
osascript -e 'tell application "Notes" to get body of note "Work Todo Backlog"'Include any items from this note in the triage process alongside the repo backlog.
(Optional) Search Teams for tagged commitments (requires WorkIQ):
- Use WorkIQ to search for messages containing custom tags like
#your-todo - Query: "Search all my Teams chats and messages for #your-todo from the past week"
- IMPORTANT: Only include messages where user is the sender
- Surface any new items found and include in triage alongside backlog items
- Always include the Teams message link for context
- Format:
- [ ] [commitment text] ([link to message](url))
- Use WorkIQ to search for messages containing custom tags like
Generate triage markdown file (
work/daily/YYYY-MM-DD-triage.md): Create a markdown file for user to review and make decisions. Structure:# Day Triage: YYYY-MM-DD ## Overview - Day of week, date - Count of meetings, conflicts, backlog items - Key highlights (VIP meetings, overdue items, etc.) ## VIP Alerts (Tomorrow) ⚠️ List any VIP meetings for next business day with prep recommendations ## Calendar Conflicts For each conflict slot, show: ### Slot N: HH:MM-HH:MM | Keep | Meeting | Time | Organizer | Attendees | Notes | |------|---------|------|-----------|-----------|-------| | [ ] | Meeting name | start-end | email | count | VIP/1:1/etc | **Recommendation:** [suggested keep] because [reason] **Your choice:** ___ **Action needed:** Decline [meeting names] in Outlook ## Backlog Triage ### Overdue / Due Today - [ ] Item — Action: [pull/someday:date/delegate:name] ___ ### New Items - [ ] Item — Action: ___ ### Carried Over - [ ] Item — Action: ___ ## Proposed TODOs Based on your goals and patterns, here's a suggested TODO list: - [ ] ...- Open the file in VS Code:
code work/daily/YYYY-MM-DD-triage.md - Tell user: "I've created your triage file. Please review, mark your choices, and say 'ready' when done."
- Open the file in VS Code:
Wait for user to edit and confirm ("ready" or similar)
Process decisions from triage file:
- Parse the triage markdown file
- For calendar conflicts:
- List meetings user needs to decline manually in Outlook
- Remind user to decline the meetings they didn't mark as "keep"
- For backlog items:
- Update
work/backlog/BACKLOG.mdwith appropriate tags
- Update
- Update
work/context/meeting-preferences.mdwith any new patterns learned
Create today's daily note (
work/daily/YYYY-MM-DD-notes.md):# Notes for YYYY-MM-DD## TODOs:(bulleted list from confirmed triage)## Notes:(freeform)## Links:(important links)
iCal Parsing Reference
To parse the iCal file for a specific date (cross-platform — works on Windows, macOS, Linux):
import re
import os
import tempfile
import urllib.request
from datetime import date
# Fetch calendar to a cross-platform temp path
ical_url = 'YOUR_ICAL_URL'
ical_path = os.path.join(tempfile.gettempdir(), 'calendar.ics')
urllib.request.urlretrieve(ical_url, ical_path)
# Parse events for today (or pass a specific date as a string: 'YYYYMMDD')
target_date = date.today().strftime('%Y%m%d')
with open(ical_path, 'r', encoding='utf-8') as f:
content = f.read()
events_raw = content.split('BEGIN:VEVENT')
for event in events_raw[1:]:
if 'STATUS:CANCELLED' in event:
continue
summary = ''
dtstart = ''
organizer = ''
for line in event.split('\n'):
if line.startswith('SUMMARY:'):
summary = line.replace('SUMMARY:', '').strip()
if line.startswith('DTSTART'):
dtstart = line
if line.startswith('ORGANIZER'):
organizer = line
if target_date in dtstart:
# Extract time and display
match = re.search(r'T(\d{2})(\d{2})', dtstart)
if match:
hour, minute = int(match.group(1)), int(match.group(2))
print(f"{hour:02d}:{minute:02d} - {summary}")
Sources of Truth
work/daily/README.md- Daily note formatwork/goals/README.md- Goals formatwork/reflections/README.md- Reflection formatwork/backlog/README.md- Backlog tagswork/backlog/BACKLOG.md- Active backlogwork/context/meeting-preferences.md- Learned patterns for conflict resolution- Calendar: iCal URL or WorkIQ