skills/apple-calendar/calendar-conflicts/SKILL.md
Find overlapping calendar events (double-bookings). Use when user asks about scheduling conflicts, overlapping meetings, or double-booked time slots.
npx skillsauth add aashari/ai-agent-skills calendar-conflictsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Detect time-overlapping events (double-bookings). All-day events are excluded since they don't block time slots.
$ARGUMENTS — time range (default: next 7 days):
DB="$HOME/Library/Group Containers/group.com.apple.calendar/Calendar.sqlitedb"
ARGS="$ARGUMENTS"
DAYS=7
if echo "$ARGS" | grep -qiE '[0-9]+ day'; then DAYS=$(echo "$ARGS" | grep -oiE '[0-9]+'); fi
if echo "$ARGS" | grep -qi 'week'; then DAYS=7; fi
if echo "$ARGS" | grep -qi 'today'; then DAYS=1; fi
NOW_CD=$(( $(date +%s) - 978307200 ))
FUTURE_CD=$(( $(date +%s) + DAYS * 86400 - 978307200 ))
# Fetch all timed events in window, detect overlaps in Python
sqlite3 -separator '|' "$DB" "
SELECT
ci.ROWID,
ci.summary,
date(COALESCE(oc.occurrence_start_date, oc.occurrence_date) + 978307200, 'unixepoch', 'localtime') as day,
COALESCE(oc.occurrence_start_date, oc.occurrence_date) as start_cd,
COALESCE(oc.occurrence_end_date, oc.occurrence_date + 3600) as end_cd,
strftime('%H:%M', COALESCE(oc.occurrence_start_date, oc.occurrence_date) + 978307200, 'unixepoch', 'localtime') as start_time,
strftime('%H:%M', COALESCE(oc.occurrence_end_date, oc.occurrence_date + 3600) + 978307200, 'unixepoch', 'localtime') as end_time,
c.title as calendar
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
WHERE oc.occurrence_date >= $NOW_CD
AND oc.occurrence_date <= $FUTURE_CD
AND ci.hidden = 0
AND ci.status != 2
AND ci.all_day = 0
AND s.type != 5
AND s.disabled = 0
GROUP BY ci.ROWID, day
ORDER BY day, start_cd;
" | python3 -c "
import sys
events = []
for line in sys.stdin:
parts = line.strip().split('|')
if len(parts) >= 8:
rowid, title, day, start_cd, end_cd, start_time, end_time, calendar = parts[:8]
events.append({'id': rowid, 'title': title, 'day': day,
'start': int(start_cd), 'end': int(end_cd),
'start_time': start_time, 'end_time': end_time, 'cal': calendar})
conflicts = []
for i in range(len(events)):
for j in range(i+1, len(events)):
a, b = events[i], events[j]
if a['day'] != b['day']:
break
# Overlap: a.start < b.end AND a.end > b.start
if a['start'] < b['end'] and a['end'] > b['start']:
conflicts.append((a, b))
if not conflicts:
print('No conflicts found.')
else:
print(f'{len(conflicts)} conflict(s) found:')
for a, b in conflicts:
print(f\" {a['day']}: [{a['start_time']}-{a['end_time']}] {a['title']} ({a['cal']})\")
print(f\" overlaps [{b['start_time']}-{b['end_time']}] {b['title']} ({b['cal']})\")
print()
"
List each conflict pair:
Monday March 3:
[09:00–10:00] Weekly Sync (Work) overlaps
[09:30–10:30] Sprint Planning (Work)
No conflicts: "No overlapping events in the next 7 days."
data-ai
Show work emails only, filtered to Exchange/EWS accounts and corporate email domains. Digest with priorities. Use when user asks about work email, work inbox, or wants to separate work from personal mail. Arguments: optional date range or "today", "yesterday", "this week".
testing
Intelligent inbox triage — surface the most important emails across all accounts, prioritized by urgency and requiring attention. Use when user wants a smart overview of what needs their attention, asks "what's important in my email", or wants help deciding what to read first. Arguments: optional time window (default: last 48 hours) or account filter.
data-ai
Find flight bookings, hotel reservations, travel itineraries, and booking confirmations from email. Use when user asks about upcoming trips, travel plans, booking references, flight details, or hotel reservations. Arguments: optional destination, airline, date range, or booking service.
testing
Show who sends the most email, communication frequency analysis, and relationship mapping. Use when user asks who emails them most, top contacts, communication patterns, or wants to understand their email social graph. Arguments: optional time range (default: last 90 days), account filter, or "humans only" to exclude automated senders.