Mail could already read a local mbox or .eml folder from day one, so switching to PIM for mail never meant abandoning years of history. Contacts and Calendar couldn’t do the equivalent, which meant using either one seriously meant starting completely empty or manually re-entering everything you already had somewhere else. Import for both closes that gap, following the exact same shape Mail already proved out.

For Contacts, /scan-contacts looks in the places address books actually live — Thunderbird’s abook.sqlite files across every profile it finds, and loose .vcf files in Downloads — and /import-contacts reads whichever one you pick. Thunderbird’s own address-book format turned out to have a real wrinkle worth knowing about: a modern Thunderbird keeps a contact’s actual data inside a single vCard blob column, not spread across separate name/email/phone columns the way an older version does, so the reader has to check for that blob first and only fall back to individual columns when it’s missing. Re-running the import against the same file doesn’t create duplicates — contacts dedupe by shared email, or by normalized name when there’s no email to match on.

For Calendar, /scan-calendars finds .ics files the same way, and /import-calendar maps each event onto PIM’s own appointment model — including recurrence, converted from iCalendar’s RRULE syntax into PIM’s own representation, and each event’s real UID becomes its PIM id, so importing the same file twice updates existing appointments instead of duplicating them. A few of iCalendar’s more exotic recurrence options (specific weekdays-of-month, sub-daily repeats) aren’t mapped yet and get logged and dropped rather than silently misrepresented — a real remaining gap, not something we’re pretending is handled.

Both imports exist for the same reason Mail’s did originally: PIM’s actual differentiator was never going to be “yet another place to type in your contacts and appointments by hand.” It’s what the AI does with them once they’re there. Import is just the door you walk through to get there without losing what you already had.