# 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: `majiayu000/calendar-today` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/calendar-today`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/calendar-today/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/calendar-today

---


# Calendar Today — Today's Schedule

Show all events scheduled for today, all-day events first, then timed events in chronological order.

## Steps

```bash
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."

