| name | today |
| description | Plan today's work using this repo's workflow. Use when the user asks for /today or phrases like "plan my day", "today's plan", "set my priorities", or "start my day". |
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:
VIP Organizers - meetings FROM these organizers require prep:
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.md with 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
- Note: iCal is read-only. For declining meetings, user must do so manually in Outlook after reviewing the triage file.
-
Read work/backlog/BACKLOG.md and 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.
-
(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))
-
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."
-
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.md with appropriate tags
- Update
work/context/meeting-preferences.md with 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
ical_url = 'YOUR_ICAL_URL'
ical_path = os.path.join(tempfile.gettempdir(), 'calendar.ics')
urllib.request.urlretrieve(ical_url, ical_path)
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:
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 format
work/goals/README.md - Goals format
work/reflections/README.md - Reflection format
work/backlog/README.md - Backlog tags
work/backlog/BACKLOG.md - Active backlog
work/context/meeting-preferences.md - Learned patterns for conflict resolution
- Calendar: iCal URL or WorkIQ