TOOLS & WORKFLOWS
I asked my AI agent to find Christmas flights. The cheapest fare was not the answer.
Published:
My partner suggested a trip to Europe in December. I passed the job to Ada, the AI chief of staff I run in Claude Code, in one line: "do a flight check for best pricing and timing in December and over Christmas." Later I added a second line: "send some sub-agents."
What happened next is the part worth copying. Not the tool. The order of the steps, and the corrections along the way. The same pattern works in Claude Code, in Grok, in Moos, or in whichever personal agent you already use.
Samdo a flight check for best pricing and timing in December and over Christmas
AdaLaunching a first fare agent on all 16 cities, and checking your calendar in parallel.
AdaCalendar: fixed trip, client workshop in Chengdu, 30 Nov to 3 Dec. Correction sent to the running agent: window A starts 4 Dec. The other December items are recurring calls and can move.
Samsend some sub-agents
AdaRe-scoping the running agent to one city group. Adding two more fare agents and one airline-quality agent. Read only: no booking, no sign-in.
Step 1: Check context in parallel, and correct the running agent
Ada did two things in the same turn. It launched a first pricing agent on the whole city list, and it opened my calendar.
The calendar check found a fixed trip: a client workshop in Chengdu from 30 November to 3 December. The first agent had already started on a December window of 1 to 15 December. So Ada sent the running agent a correction: window A now starts on 4 December or later. Everything else in December was recurring calls that can move, and Ada said so instead of quietly treating them as blockers.
The lesson: a search that ignores your calendar finds the cheapest flight you cannot take. Run the context check alongside the search, and correct the running agent the moment the context lands. The honest takeaway is simpler still: next time, check the calendar before the brief goes out. It would have saved a correction.
Step 2: A brief with constraints and guardrails
The brief was precise enough for another agent to follow without asking me anything:
- From Hong Kong (HKG), 2 adults, economy.
- Window A: depart 4 to 15 December (after the correction), stay 7 to 10 nights.
- Window B, Christmas: depart 18 to 23 December, return 27 December to 3 January. In Hong Kong, 25 and 26 December are public holidays, so this window uses them.
- A fixed city list: London, Paris, Amsterdam, Frankfurt, Munich, Zurich, Rome, Milan, Barcelona, Madrid, Vienna, Prague, Helsinki, Istanbul, Copenhagen and Lisbon.
- Live prices only from Google Flights in HKD, with the best fares cross-checked on a second site (Skyscanner or Kayak).
- Read only. No booking, no sign-in, no personal details typed anywhere.
The guardrail is not decoration. A browsing agent that can sign in can also buy. I want it to look, not to act.
Step 3: Decompose and run in parallel
When I asked for more agents, Ada did not kill the first one and start over. It narrowed that running agent to one group of cities and started two more, so three pricing agents worked in parallel on 17 cities (Budapest was added at the split):
- North and west hubs: London, Paris, Amsterdam, Frankfurt, Munich, Zurich.
- South: Rome, Milan, Barcelona, Madrid, Lisbon.
- Central and north, plus Istanbul: Vienna, Prague, Budapest, Helsinki, Copenhagen, Istanbul.
Then it added a fourth agent that never looks at a fare table. Its job is the airlines: seat comfort, on-time record, winter disruption risk, baggage rules, Asia Miles earning and where each airline sits on price. Every claim needs a cited source.
Splitting by geography keeps each agent's search small enough to finish properly. Splitting price from quality stops one agent from talking itself into the cheapest seat on the worst airline.
One thing I would set up differently: the agents shared one browser. Mid-search, one agent moved a tab to Vienna while another was using it. If you run agents in parallel, give each its own browser session.
Step 4: Re-scope mid-flight
The re-scope deserves its own line, because it is the habit most people skip. When the plan changes, you do not have to throw away work in progress. Tell the running agent its new scope and what it can drop. The time it already spent is not wasted, and you do not get two agents searching the same cities.
Step 5: Receipts, not summaries
Every agent reports the same four things for each fare: the price, the source URL, the time it was checked, and the caveats.
The caveats turned out to be where the value was. The agents' reports flagged things a plain "cheapest fare" answer would have hidden:
- The cheapest fares route through mainland China, and the search results show only the outbound leg's timing. Kayak exposed a return of 27 hours 20 minutes on one of them.
- The prices on Google Flights' date grid did not match the results pages, so the agent quoted only results-page figures.
- A HK$8,780 Madrid fare looked like a bargain until the south agent opened the return: 30 hours 45 minutes, including a 14-hour-55-minute overnight in Shanghai.
- Skyscanner stopped the south agent with a robot check, so it cross-checked on Kayak instead and said so. When Kayak did not show a fare, the report marked it "verify on the airline site" rather than dropping the caveat.
- Frankfurt's and Munich's Christmas markets close on 22 and 24 December respectively. A cheap Christmas fare to either city lands after the reason to go.

An agent that says "around HKD 6,000" has told me nothing I can act on. An agent that gives me a link, a timestamp and the catch has told me where to look, how stale the number is and what it costs me. It is the same rule I teach for any AI comparison: if you cannot trace a number to its source, you cannot use it.
Step 6: The quality agent changes the answer
The fourth agent is the reason the cheapest fare was not the answer. Its report, with sources, put a different shape on the price table:
- The strongest nonstop option is Cathay Pacific, which its sources rank among the world's best economy cabins this year.
- The cheapest one-stop option is Air China, and its route is shorter than many one-stop alternatives. Turkish Airlines sits in the middle on price.
- Gulf carriers carry airspace risk this winter. If you book one, book a fare you can change.
- Finnair has strike dates flagged for 9 and 13 December.
- In winter, allow at least 2.5 hours for a connection.
- For Christmas travel, book by about 12 October.
None of that is on a fare table. A pure price search would have ranked a cheap Gulf connection or a 27-hour return near the top and called it a win.
Step 7: The merge, where the answer changed
Ada is the coordinator. It merges the four reports into one table per window and one recommendation, with the trade-off stated in a sentence. Then it stops. Booking is mine, and the trip is a decision my partner and I make together.
The merge is where the value appeared. No single agent's best pick survived it intact. The north and west agent liked Zurich. The south agent liked Milan and Rome. The central agent liked Vienna. And the quality agent knocked out a fare Google rated "low": a Finnair nonstop to Helsinki on 7 to 14 December, because those dates span the 9 and 13 December strike dates it had flagged. That flag rests on one source, but it is exactly what parallel agents are for: one agent's catch corrects another agent's bargain.
Two patterns repeated across agents, which is how I know they are real. Two of them hit Skyscanner's robot check independently and cross-checked on Kayak instead. And the central agent saw the same date-grid problem as the first: prices rose once a return flight was selected.
The recommendation
Prices checked on 2 October 2026, between 01:23 and 02:25 HKT, on Google Flights (Hong Kong), for 2 adults, round trip, economy. Fares change; treat every figure as a snapshot.
- Overall pick: Vienna.
- Early December: 7 to 14 December, HK$10,660 for 2. SWISS via Zurich, 16h10 out and 14h20 back. Google Flights rated it low, HK$3,084 cheaper than usual, and the Christmas markets are fully open.
- Christmas: 21 to 29 December, HK$11,400 for 2. SWISS or Austrian via Zurich out (16h10), Lufthansa via Frankfurt back (15h). Arrive on 22 December, with two full market days before the 24th. Re-confirmed live at 02:20 HKT.
- Cheapest on European airlines: Rome. 7 to 14 December at HK$9,220 (Kayak confirmed), or 23 to 29 December at HK$10,574 (Kayak did not confirm). At Christmas, Vienna costs about HK$826 more than Rome and has the markets.
- The very lowest fares (Barcelona, Madrid, Milan, about HK$8,450–8,550) go via Beijing on Air China, about 16 to 19 hours each way.
- Best nonstop value, and the surprise: Istanbul. Turkish Airlines nonstop, about 12 hours out and 10 back. 5 to 13 December at HK$10,044 (Kayak matches), or 19 to 28 December at HK$10,604. Istanbul runs normally over 25 and 26 December, but there is little Christmas atmosphere.
- The risk that remains: the Vienna Christmas outbound connects in Zurich in 1 hour 10 minutes, and the quality agent advised allowing at least 2.5 hours in winter. On a single ticket the airline rebooks a missed connection, but snow delays are real. That is the trade-off to weigh before booking.

Every fare the agents reported
| Window | Route and dates | Fare for 2 (HKD) | Note |
|---|---|---|---|
| A | Barcelona, 8 to 16 Dec | 8,454 | Lowest fare found. Air China via Beijing, about 18h45 out, return checked. Kayak HK$8,594 for 2 |
| A | Milan, 6 to 13 Dec | 8,494 | Shortest of the cheap fares, about 16h each way; return checked; not shown on Kayak: verify on the airline site |
| A | Madrid, 5 to 12 Dec | 8,531 | Air China via Beijing, about 18h out, return checked. Kayak HK$8,690 for 2 |
| A | Rome, 7 to 14 Dec | 9,220 | SWISS out, SWISS or Lufthansa back, about 15 to 16h. Kayak exact match |
| A | Istanbul, 5 to 13 Dec | 10,044 | Turkish Airlines nonstop, about 12h out, 10h back. Kayak matches |
| A | Frankfurt, 4 to 13 Dec | 10,158 | Cheapest in the north and west group. Air China via Beijing, 15h45 outbound |
| A | Munich, 5 to 13 Dec | 10,236 | Air China |
| A | Vienna, 7 to 14 Dec | 10,660 | Overall pick. SWISS via Zurich, 16h10 out, 14h20 back. Google: low |
| A | Paris, 4 to 14 Dec | 10,670 | Air China. Kayak showed a 27h20 return |
| A | Zurich, 6 to 14 Dec | 14,286 | Best value in the north and west group. SWISS nonstop, 13h40 |
| A | Helsinki, 7 to 14 Dec | 14,958 | Finnair nonstop, Google: low. Dates span the 9 and 13 Dec strike dates the quality agent flagged |
| B | Rome, 23 to 29 Dec | 10,574 | Lufthansa via Frankfurt, 16h20 out, 14h55 back. Kayak did not confirm the fare |
| B | Istanbul, 19 to 28 Dec | 10,604 | Turkish Airlines nonstop |
| B | London, 18 Dec to 3 Jan | 11,040 | Cheapest in the north and west group. China Southern via Beijing Daxing, 17h45 outbound |
| B | Madrid, 23 to 28 Dec | 11,254 | Etihad, Kayak confirmed. A Gulf carrier: book only on a changeable fare |
| B | Amsterdam, 18 Dec to 1 Jan | 11,290 | China Southern |
| B | Vienna, 21 to 29 Dec | 11,400 | Overall pick. SWISS or Austrian via Zurich out (16h10, 1h10 connection), Lufthansa via Frankfurt back (15h) |
| B | Paris, 20 to 27 Dec | 11,806 | China Eastern via Shanghai |
| B | Frankfurt, 23 to 28 Dec | 16,376 | Cheapest nonstop in the north and west group. Lufthansa |
| B | Zurich, 22 Dec to 3 Jan | 16,696 | Nonstop. Cathay Pacific |
London: Google's "Cheapest" tab showed from HK$10,520 for an itinerary we did not inspect; Kayak's cheapest comparable option took 36h30.
Rome: HK$9,100 on screen buys the same outbound with a 20-hour return; HK$120 more cuts the return to about 15 hours.
Lisbon is off the Christmas list: every fare under HK$16,000 was a routing of 31 to 37 hours.
The brief, ready to copy
Swap the brackets for your own trip. It works as a single message to any agent that can browse.
GOAL: Find the best fare and timing for [trip]. Recommend; do not book.
CONTEXT FIRST: Check my calendar for fixed commitments between [dates]
before you search. Treat recurring calls as movable.
Tell me what you excluded and why.
TRIP: From [HKG] · [2 adults] · [economy]
WINDOW A: depart [date] to [date], stay [7 to 10] nights
WINDOW B: depart [date] to [date], return [date] to [date]
DESTINATIONS: [city list], split into [3] groups, one agent per group
QUALITY: one more agent on the airlines only: comfort, on-time record,
winter disruption risk, baggage, [loyalty programme], price position.
Cite a source for every claim.
RECEIPTS: for every fare give the price in [HKD], the source URL,
the time checked and any caveats, including the return leg.
Quote results pages, not date grids. Cross-check the best fares
on a second site.
GUARDRAILS: Read only. No booking, no sign-in,
no personal details entered anywhere.
OUTPUT: one table per window, then one recommendation
with the trade-off in one sentence. I decide.
What carries over to any agent
| Step | What it prevents |
|---|---|
| Context check, corrected into the running work | The cheapest flight on a day you are working |
| A written brief with guardrails | An agent that guesses your trip, or books it |
| Split the work, run it in parallel | One agent doing everything shallowly |
| A separate quality agent | Price winning every argument by default |
| Re-scope, do not restart | Lost work and duplicate searches |
| Receipts and caveats for every number | A confident figure nobody can check |
| A human makes the decision | Spending money on an agent's judgement |
None of this needs a special travel tool. It needs an agent that can read your calendar and browse, and a person who writes the brief before asking for the answer. I wrote about running several agents as a team in Claude Code Mastery: Agent Teams & Automation, and about checking an AI's lowest quote before you act on it in AI found the lowest quote. Why can't we place the order yet?.
FAQ
Can an AI agent book flights for me?
Some can, but I do not let mine. The brief says read only: no booking, no sign-in and no personal details. The agent compares fares and recommends; I book on the airline or travel site myself after checking the price again.
How do I use AI agents to find cheap flights?
Put your calendar constraints in the brief before the search starts. That is the lesson from this trip: my agent was already searching when the calendar turned up a clash, and it had to be corrected mid-run. Then write the rest of the brief: departure airport, travellers, cabin, date windows, destinations, live prices only and a second site to cross-check. Split the destinations across several agents running in parallel, and ask each to report the price, source link, time checked and caveats, including the return leg.
Why use several agents instead of one?
Each agent gets a smaller job it can finish properly, and they run at the same time. A separate agent for airline quality (comfort, punctuality, winter disruption, baggage) stops the cheapest fare from winning by default. On this trip it flagged airspace risk and a booking deadline that no fare table showed.
Are prices from an AI agent accurate?
They are a snapshot. Fares change by the hour, and different views of the same site can disagree, so every price should come with its source link and the time it was checked. Confirm on the airline or booking site before you pay.
Does this only work in Claude Code?
No. The workflow matters more than the tool. Any personal agent that can read your calendar and browse the web can follow the same brief, including Grok and other assistants.