Sam Wong.黃力桐

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.

A recreation of the exchange, not a screenshot. My two lines are verbatim; Ada's replies are condensed.

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:

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):

  1. North and west hubs: London, Paris, Amsterdam, Frankfurt, Munich, Zurich.
  2. South: Rome, Milan, Barcelona, Madrid, Lisbon.
  3. 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.

The workflow: from one line to one decisionWorkflow diagram: the agent checks the calendar while the first fare agent searches and corrects it, writes a brief with guardrails, runs three fare agents and one airline-quality agent in parallel, merges their receipts into one recommendation, and a human makes the booking decision.1 · CONTEXT, IN PARALLELCheck the calendar while the first agentsearchesFound: client workshop, Chengdu, 30 Nov to 3 DecCorrection sent: window A starts 4 Dec2 · THE BRIEFConstraints and guardrailsHKG · 2 adults · economy · two date windowsLive prices, second-site check, read only3 · FOUR AGENTS IN PARALLELFaresnorth and west hubsprice · link · timecaveatsFaressouthern Europeprice · link · timecaveatsFarescentral, north +Istanbulprice · link · timecaveatsAirline qualitycomfort · punctualitywinter risk4 · MERGECoordinator merges the receiptsOne table per window, one recommendation5 · DECIDEA human booksThe agent stops at the recommendation
The workflow: from one line to one decision

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 north and west agent at work on Google Flights (recorded 2 October 2026).
The south agent on Google Flights (recorded 2 October 2026). Prices on screen can differ from the table, which quotes the figures each agent checked and timestamped.
Google Flights results for Hong Kong to London, 18 December to 3 January, 2 adults, economy, round trip, with fares in Hong Kong dollars.
A results page the agent quoted from. Every fare in its report points back to a page like this, with the time it was checked.

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:

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.

Google Flights results for Hong Kong to Vienna, 21 to 29 December, 2 adults, economy: SWISS and Austrian via Zurich at HK$11,400 round trip, with a 1 hour 10 minute connection.
The Christmas pick, as the central agent saw it. Note the 1h10 connection in Zurich: that is the risk that remains.

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.