aashari

mail-travel

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.

aashari 4 Updated 3mo ago
GitHub

Install

npx skillscat add aashari/ai-agent-skills/mail-travel

Install via the SkillsCat registry.

SKILL.md

Mail Travel — Bookings, Flights, and Itineraries

Search: $ARGUMENTS (default: recent and upcoming travel)

Step 1: Find travel-related emails

DB="$HOME/Library/Mail/V10/MailData/Envelope Index"

sqlite3 "$DB" "
SELECT datetime(m.date_received,'unixepoch','localtime') as dt,
       s.subject, a.address as sender, a.comment as name,
       mb.url, m.ROWID
FROM messages m
JOIN subjects  s  ON m.subject = s.ROWID
JOIN addresses a  ON m.sender  = a.ROWID
JOIN mailboxes mb ON m.mailbox = mb.ROWID
WHERE m.deleted = 0
  AND mb.url NOT LIKE '%Spam%' AND mb.url NOT LIKE '%Trash%'
  AND (
    -- Travel booking senders
    a.address LIKE '%agoda%'
    OR a.address LIKE '%booking.com%'
    OR a.address LIKE '%airbnb%'
    OR a.address LIKE '%travelio%'
    OR a.address LIKE '%tiket%'
    OR a.address LIKE '%traveloka%'
    OR a.address LIKE '%expedia%'
    OR a.address LIKE '%hotels.com%'
    OR a.address LIKE '%airasia%'
    OR a.address LIKE '%garuda%'
    OR a.address LIKE '%lionair%'
    OR a.address LIKE '%batik%'
    OR a.address LIKE '%citilink%'
    OR a.address LIKE '%singaporeair%'
    OR a.address LIKE '%united%'
    OR a.address LIKE '%delta%'
    OR a.address LIKE '%emirates%'
    OR a.address LIKE '%gojek%'
    OR a.address LIKE '%grab%'
    -- By subject
    OR s.subject LIKE '%flight%'
    OR s.subject LIKE '%hotel%'
    OR s.subject LIKE '%booking%'
    OR s.subject LIKE '%reservation%'
    OR s.subject LIKE '%itinerary%'
    OR s.subject LIKE '%check-in%'
    OR s.subject LIKE '%boarding%'
    OR s.subject LIKE '%e-ticket%'
    OR s.subject LIKE '%confirmation%'
    OR s.subject LIKE '%your trip%'
    OR s.subject LIKE '%upcoming trip%'
    OR s.subject LIKE '%airport%'
  )
ORDER BY m.date_received DESC
LIMIT 100;" 2>/dev/null

Step 2: Filter by destination/dates if specified

If $ARGUMENTS contains a destination or date, add LIKE filters on subject.

Step 3: Parse booking details

python3 ~/.claude/skills/_mail-shared/parser.py <ROWID1> <ROWID2> ...

From bodies extract:

  • Flights: origin → destination, airline, flight number, departure date/time, arrival, class, booking reference
  • Hotels: property name, check-in/check-out dates, room type, booking ID
  • Rental/Apartment: property ID, address, check-in time, host contact
  • Total amount paid
  • Cancellation policy
  • Booking reference/ID

Step 4: Build itinerary view

Sort by travel date (not email received date) to create a chronological itinerary.

Output Format

Group by trip (cluster bookings by date proximity):

Trip: [Destination] — [Date Range]

  • Flight: [route] on [date] — Ref: [booking ref]
  • Hotel: [name] [check-in] to [check-out] — Ref: [ID]
  • Total spent: [amount]

Also note:

  • Pending check-ins (upcoming within 7 days)
  • Pending refunds from cancelled trips
  • Baggage allowance if mentioned