Calendar Today — Today's Schedule
calendar-today
Show all of today's events in time order. Use when user asks what's on their schedule today, what meetings they have, or what's happening today.
SKILL.md
Full skill instructions
Calendar Today — Today's Schedule
Show all events scheduled for today, all-day events first, then timed events in chronological order.
Steps
DB="$HOME/Library/Group Containers/group.com.apple.calendar/Calendar.sqlitedb"
# CoreData epoch: seconds since 2001-01-01
# Today's window: midnight to midnight local time
TODAY_START=$(python3 -c "
from datetime import datetime, date
import calendar, time
d = date.today()
epoch_2001 = 978307200
start = int(datetime(d.year, d.month, d.day, 0, 0, 0).timestamp()) - epoch_2001
end = int(datetime(d.year, d.month, d.day, 23, 59, 59).timestamp()) - epoch_2001
print(start, end)
")
NOW_CD=$(echo $TODAY_START | cut -d' ' -f1)
END_CD=$(echo $TODAY_START | cut -d' ' -f2)
sqlite3 "$DB" "
SELECT
ci.all_day,
COALESCE(
strftime('%H:%M', oc.occurrence_start_date + 978307200, 'unixepoch', 'localtime'),
strftime('%H:%M', oc.occurrence_date + 978307200, 'unixepoch', 'localtime')
) as start_time,
COALESCE(
strftime('%H:%M', oc.occurrence_end_date + 978307200, 'unixepoch', 'localtime'),
''
) as end_time,
ci.summary as title,
COALESCE(l.title, '') as location,
COALESCE(ci.conference_url, '') as conf_url,
c.title as calendar,
ci.invitation_status,
ci.ROWID as id
FROM OccurrenceCache oc
JOIN CalendarItem ci ON oc.event_id = ci.ROWID
LEFT JOIN Calendar c ON ci.calendar_id = c.ROWID
LEFT JOIN Store s ON c.store_id = s.ROWID
LEFT JOIN Location l ON ci.location_id = l.ROWID
WHERE oc.occurrence_date >= $NOW_CD
AND oc.occurrence_date <= $END_CD
AND ci.hidden = 0
AND ci.status != 2
AND s.type != 5
AND s.disabled = 0
GROUP BY ci.ROWID
ORDER BY ci.all_day DESC, oc.occurrence_date, COALESCE(oc.occurrence_start_date, oc.occurrence_date);
"
Output Format
Present as two sections:
All-Day List all-day events by name and calendar (no time needed).
Timed Events
Table with columns: Time (HH:MM–HH:MM), Event, Location, Calendar.
Flag pending invites (invitation_status = 3) with "(pending)" note.
If conf_url is set, note "📍 Meet/Zoom link" or just say "has video link."
Show total event count at the bottom. If no events: "Nothing on the calendar today."
