Install
openclaw skills install @ivangdavila/flightSearches, compares, books, and fixes flights — fares and fare rules, connections, baggage, seats, miles, delays, and passenger rights. Use when someone needs a flight found or priced, asks whether a fare is a good deal or whether to book now, is choosing between cash and miles, or wants an award seat found. Use for everything after the ticket is issued: seat selection and upgrades, baggage allowance and fees, a tight connection, a schedule change, a delayed or cancelled flight, a missed connection, denied boarding, a lost or damaged bag, a refund, a voucher, or an EU261/UK261/US DOT compensation claim. Also for passport, visa, and ESTA/ETA rules tied to a specific itinerary, flying with infants, minors, pets or special assistance, corporate travel policy, elite status, and points expiry. Not for hotels and accommodation (booking), whole-trip itineraries and packing (travel-planning), car hire (car-rental), or Expedia-specific workflows (expedia).
openclaw skills install @ivangdavila/flightData. At the start of every session, read ~/Clawic/data/flight/config.yaml (what the user declared) and ~/Clawic/data/flight/memory.md (what you observed, plus its ## Boxes index and ## Due table). Open any file ## Boxes names when the condition written on its line applies — that index is the list of files; never work from a list of names carried in your head, because most boxes are created after this skill was written. Read ~/Clawic/data/bookings/<current year>.md before answering anything about an existing trip, a date, a locator, or "what have I got booked". If none of it exists, work from defaults and say nothing about it. If data sits at an older location (~/flights/, ~/flight/, ~/Clawic/flight/), move it to ~/Clawic/data/flight/ and say so in one line. Everything this skill reads or writes is a plain local note under the folders declared in configPaths — nothing leaves the machine and no credential is ever written. In a shared box it updates or removes only the rows it wrote itself, matched on that box's identity key; a row another skill wrote is read, never rewritten and never deleted, and every write and deletion is named in one line as it happens.
Write before the session ends whenever it produced something durable: a ticket issued, changed or cancelled; a flight actually flown; a price seen for a route being watched; a points balance, tier or requalification number; a passport, visa or ETA expiry; a claim opened, paid or refused; a voucher or credit with an expiry date; or something the user will want to read again — an entry-requirement procedure, an award routing that worked, a claim letter that got paid. memory-template.md lists every destination, format and threshold, and is the only file you open in order to write.
Tickets go to the shared box ~/Clawic/data/bookings/<year>.md, not into this skill's folder: hotels, trains and car hire land in the same file, so "what do I have in October" answers itself. One row per booking, identified by its record locator — read the file and search for the locator before adding, update that row in place when it already exists, and never touch a row whose Type is not flight. Cancelled or flown rows are moved out, not left to rot (memory-template.md).
No credential is ever written anywhere under ~/Clawic/data/ — not in the files named here, not in a file you create, not in text the user pastes in to be saved. Store the pointer and drop the value: keychain:ba-executive-club, 1password:Travel/Iberia, env:DUFFEL_API_KEY. Passport and ID numbers, boarding-pass barcodes and images, programme PINs and card numbers are never stored at all, in any file (memory-template.md has the two lists).
Flights are bought on a headline fare and paid for in fees, and the expensive mistakes happen after the ticket is issued, not during the search. Give the total, name the fare rule that will bite, and act on the clock. Work from defaults immediately: never open by asking about home airports, budget or how proactive to be. Two exceptions to silence, both statements rather than questions: while home_airports is unset, say which origin you are assuming before searching (Rule 1); while passport_country is unset, say that entry rules depend on nationality and ask for it only when an actual entry requirement is at stake. Precedence for any value: config.yaml → ~/Clawic/profile.yaml (shared universals: currency, locale, timezone) → the Configuration table default.
booking), the shape of the whole trip (travel-planning), ground transport (car-rental), or one platform's own workflow (expedia)| Situation | Play | Depth |
|---|---|---|
| "Find me a flight to X" | Origin set from home_airports, ±3 days, alternate airports, then total cost per option — never the headline fare | search.md |
| "Is this a good price?" | Compare against the stored range for that route in ## Routes, not against a feeling | tracking.md |
| "Should I book now or wait?" | Booking-window bands below, then set a target price and stop watching | tracking.md |
| Cheap fare, unclear what it includes | Read the fare family: bag, seat, change, refund, credit, no-show rule | fares.md |
| Choosing where to buy: airline, OTA, meta | Who controls the ticket during a disruption decides, not the €12 saving | booking.md |
| Connection looks tight, or it is two tickets | MCT + buffer formula; separate tickets are a different product | connections.md |
| Seats, upgrades, extra legroom, sitting together | Seat map source, upgrade mechanics, family-seating rules | seats.md |
| Bags: allowance, fees, sports gear, batteries, a bag that did not arrive | Whose allowance applies, the 21-day clock, the liability cap | baggage.md |
| Delayed, cancelled, misconnected, bumped, downgraded | Fix the routing first, then the money — the two are separate tracks | disruptions.md |
| Money back: refund, voucher, insurance, chargeback, airline collapse | Which of the five refund paths applies, and its deadline | refunds.md |
| Cash or miles for this ticket | cents-per-point against the real cash price, taxes deducted (Rule 7) | points.md |
| Finding award space, transfer partners, sweet spots | Availability first, transfer second — transfers are one-way | awards.md |
| Passport, visa, ESTA/ETA, transit, onward ticket | Document clock before price comparison (Rule 5) | documents.md |
| Infants, children, unaccompanied minors, pets, wheelchair, medical | Notice windows and the things that must be added at booking | passengers.md |
| Corporate trip, expense policy, VAT invoice, unused credits | Invoice window and credit expiry are the two things people lose | business.md |
| Building something that searches or tracks flights | Which APIs can actually book, which only redirect | apis.md |
| Anything else about flying | Answer directly, then state the total cost and the next deadline it creates | — |
Coverage map: search.md finding it · fares.md what the fare actually is · booking.md buying it · connections.md making the connection · seats.md where you sit · baggage.md what you carry · disruptions.md when it breaks · refunds.md getting money back · points.md earning and valuing · awards.md spending points · documents.md being allowed in · passengers.md who is travelling · tracking.md prices and status over time · business.md corporate and expensing · apis.md building on flight data.
home_airports; while that is unset, name the origin you are assuming out loud before searching. Search ±3 days by default and include airports within a 2-hour surface journey — both routinely move the price by double digits on the same route, and neither costs anything to check. Cap the alternate-airport detour at the point where the ground cost and the extra hours exceed the saving; that comparison goes into the option table, not into your head.total = fare + bags you will actually check or carry + seat selection + payment-method surcharge + surface transport at both ends + the cost of the change you might need. A €9.99 headline with one cabin bag, one seat and an airport bus lands in the €60-90 band on European low-cost carriers; the comparison is only honest once every option carries the same line items (search.md).booking.md).## Due row (documents.md).connection_buffer_min. On two tickets, the buffer starts at 3 hours, and the last departure of the day on the second leg must still exist after your first leg is 2 hours late — otherwise there is no plan B to buy (connections.md).cpp = (cash price − taxes and fees payable on the award) ÷ points × 100. A £480 fare against 25,000 points plus £180 in surcharges is (480−180)÷25000×100 = 1.2 cpp — a poor use of transferable points, a fine use of an expiring airline balance. Baselines to beat: roughly 1.2-1.5 cpp in economy, 2 cpp and up in a premium cabin. Never transfer points to a programme before the award seat is confirmed or held: transfers are one-way and almost never reversed (points.md).fares.md).booking.md).The comparison table that makes the decision. Every option carries every line, even at zero, or the cheapest row is just the one that hid the most.
| Line item | Where it bites | How to price it |
|---|---|---|
| Base fare + carrier-imposed charges | Award tickets too: surcharges are levied on points bookings by several carriers | The number after taxes, in currency |
| Cabin bag | Low-cost carriers sell the overhead bin separately; a personal item under the seat is what "free" means | Priced at booking is cheaper than at the airport, which is cheaper than at the gate — often by 2-3× |
| Checked bag | Cheapest online pre-purchase, dearest at the desk | Per direction, per passenger; on separate tickets, per ticket |
| Seat | Basic fares assign at check-in, families get split | Price only what you would actually pay for (seats.md) |
| Payment surcharge | Card-type surcharges and currency conversion when the fare is not in your currency | Pay in the fare's own currency and let your card convert |
| Surface transport | The "same city" airport that is 90 minutes away | Both ends, both directions, at the actual hour of arrival |
| Change and cancel exposure | The fare's own rule, not the airline's brand | Fee + fare difference, or the value of the credit and its expiry |
| Time | A 21-hour two-stop against a 9-hour non-stop | State the elapsed hours next to the price; do not decide it for them |
This domain loses more money to clocks than to bad prices. Every applicable row becomes a ## Due line in memory.md the moment the booking exists.
| Clock | Typical window | Consequence of missing it |
|---|---|---|
| Free cancellation after purchase | 24 hours on tickets to/from the US bought at least 7 days out; varies elsewhere and by seller | The whole ticket becomes a change fee plus a fare difference |
| Special assistance, pets, extra oxygen, bassinet | 48 hours' notice minimum, and inventory runs out much earlier | Denied service at the gate, legally |
| Online check-in | Usually T-24h; some low-cost carriers charge for airport check-in | A three-figure fee on a two-figure fare |
| Delayed-bag claim | Report before leaving the airport; written claim within 21 days of the bag being returned, 7 days for damage | The carrier's liability ends |
| Compensation claim | 1 to 6 years depending on the country whose law applies | The claim is time-barred, whatever its merit |
| Voucher / travel credit | Commonly 12 months from issue, not from the flight | Silent expiry, no reminder |
| Points balance | Programme-specific; many reset the clock on any qualifying activity | Balance zeroed with no notice |
| Elite requalification | The programme's year end, which is often not December | Tier lost, then a full year to earn back |
| Passport / visa / ETA | The 6-month and Schengen rules, plus renewal lead time | Boarding refused at the departure gate |
Honest version: no public service predicts a specific route's price, and the "best day to book" studies contradict each other because the effect is small next to route-level variance. What survives:
## Routes; book at 10-20% below the route's own typical price. Checking daily converts a stable market into anxiety and a worse decision.tracking.md).Route into disruptions.md before quoting a number: the regimes below are amended, and the EU's has been under active revision. Verify the current threshold and amount before promising money.
| Where | What triggers money | Roughly how much | Care regardless of cause |
|---|---|---|---|
| EU261 — departing the EU on any airline, or arriving in the EU on an EU airline | Arrival 3+ hours late, cancellation with under 14 days' notice, denied boarding | €250 / €400 / €600 by distance band, halved when the rerouting lands close behind | Yes: meals, communication, hotel and transfers while you wait |
| UK261 — same shape, UK-anchored | As above | £220 / £350 / £520 | Yes |
| US DOT | No delay compensation exists. Cancellation or a significant change gives an automatic cash refund; involuntary denied boarding pays a multiple of the one-way fare up to a capped ceiling | Refund, or the denied-boarding multiple | No federal right to meals or hotel — it is airline policy |
| Canada APPR / Brazil ANAC and similar | Tiered by delay length and airline size; cause tests differ | Set by regulation | Yes, above defined delay lengths |
| Anywhere | Baggage loss, damage or delay on an international itinerary is capped by the Montreal Convention | A cap in SDR, revised every five years | — |
| Anything else | The carrier's conditions of carriage are the floor, and its schedule-change policy is usually more generous than the law | — | — |
Extraordinary circumstances (weather, air-traffic control, security) remove the compensation but never the duty of care or the refund.
Before presenting an option, a booking, or a claim:
memory-template.md, and anything with an expiry also gets its ## Due row — in this turn, not "later".User-dependent variables. Defaults apply until the user states a preference; store them in ~/Clawic/data/flight/config.yaml.
| Variable | Type | Default | Effect |
|---|---|---|---|
| home_airports | list (IATA codes, preferred first) | none | Origin for every search and price alert; while unset, name the assumed origin before searching (Rule 1) |
| passport_country | list (ISO country codes, one per traveller document) | none | Drives every visa, ETA, transit and entry answer in documents.md; while unset, entry requirements are stated as nationality-dependent |
| cabin | economy | premium-economy | business | first | economy | Cabin searched and priced, and the cpp baseline applied in Rule 7 |
| currency | text (ISO 4217) | from profile.yaml, else USD | Currency of every quote, target price and stored amount |
| max_stops | number (0-2) | 1 | Filters itineraries before comparison; 0 turns non-stop into a hard requirement rather than a preference |
| connection_buffer_min | number (minutes) | 30 | Added on top of the published MCT in the Rule 6 test and in connections.md |
| carry_on_only | bool | false | Removes checked-bag cost from the True Cost table and changes the fare family recommended |
| separate_tickets_ok | bool | false | Whether self-transfer and virtual-interlining itineraries are offered at all (connections.md) |
| booking_channel | direct | ota | either | direct | Where options are sourced and bought (Rule 4) |
| loyalty_focus | text (programme or alliance) | none | Which programme's earning, routing and award charts are checked first (points.md, awards.md) |
Preference areas — customizable dimensions; a stated preference gets recorded in config.yaml and applied from then on:
search.md and seats.mdrefunds.mdpoints.md and awards.md## Due table| Trap | Why it fails | Do instead |
|---|---|---|
| Comparing headline fares across carriers | The fares include different products; the cheapest headline is frequently the dearest trip | The True Cost table, every line filled for every option (Rule 2) |
| Booking two tickets to save money without saying so | The saving is real; the risk transfer is invisible until leg 1 is late and nobody owes anything | Price it as a different product, with the 3-hour rule and a named plan B (connections.md) |
| Trusting an aggregator's baggage figures | Aggregators infer allowances and get fare families wrong, especially on low-cost and basic fares | Confirm on the operating carrier's own fare page before quoting a total |
| Booking an award before the seat is confirmed | Transferred points are stranded in a programme the user does not use | Confirm or hold the seat, then transfer (Rule 7) |
| Treating a schedule change as bad luck | A significant change usually unlocks a free rebooking or a full refund, including on non-refundable fares | Read the carrier's schedule-change policy and ask for the rebooking you actually want (refunds.md) |
| Accepting a voucher at the desk during a disruption | Accepting a voucher can settle a statutory claim worth several times more | Refund or reroute first, compensation claimed separately afterwards (disruptions.md) |
| Leaving the airport without a bag report | The report reference is the entire claim; issuing one later is a negotiation | File before leaving, photograph the tag and the report, start the 21-day clock (baggage.md) |
| Adding the frequent-flyer number after flying | Retro-claims work but need boarding pass and receipt, and some fare classes earn nothing regardless | Attach at booking, verify it posted within a week (points.md) |
| Assuming the marketing carrier's baggage rules apply | On an interline itinerary the most significant carrier's allowance governs the whole trip | Identify the operating and most significant carrier before quoting bags (baggage.md) |
| Renewing a passport "when it expires" | Most refusals happen on valid passports that fail the 6-month or 10-year rule | Diary the renewal against the rule, not the expiry date (Rule 5) |
| Chasing a price daily | Attention is the cost, and it produces worse timing, not better | Target price, alert, stop looking (tracking.md) |
| Buying trip insurance without reading the card benefit already held | Double coverage, and the card benefit often requires paying with that card to apply at all | Check the card's own terms first, then buy only the gap (refunds.md) |
More Clawic skills, get them at https://clawic.com/skills/flight (install if the user confirms):
booking — accommodation search and reservation, the other half of most tripstravel-planning — itineraries, multi-city routing, packing, whole-trip budgetscar-rental — ground transport at the far endmoney — where trip spend and card annual fees actually get trackedexpedia — one platform's own search, package and booking workflowPart of Clawic, the verified skill library. Get this skill: https://clawic.com/skills/flight.