An agent that books travel
In one line
Sort the tools by what happens if the model is wrong, and every control in the system lands on the one row where money moves.
The situation
A travel is proposed: the user says "get me to Berlin on Tuesday, back Thursday, under the policy limit", and the assistant finds flights, checks the travel policy, holds a seat and pays. Four tools, one loop, and the demo is genuinely impressive.
The review question is not "will it pick good flights". It is: on the day the model picks the wrong one — and it will — what happens next, and who decided that?
Sort the tools by blast radius#
Lay the four tools out by what a wrong call costs.
search_flights and get_policy are reads. A wrong call returns wrong
information, which the model may act on, but nothing in the world changes.
These can be called freely, retried freely, and logged.
hold_seat changes state, but reversibly, and airlines expect holds to lapse.
It should be — the model will call it twice
occasionally, because that is how loops behave — so a second identical call
must return the existing hold rather than making another.
charge_card is irreversible. Money moves, and unwinding it involves a
refund, a customer, and a story. This is the row where the entire design
concentrates.
That sorting is the design. The model has the same capability across all four rows; the machinery around each row is what differs.
Questions to ask
- For each tool, what happens if the model calls it with the wrong arguments?
- Which calls are irreversible, and does a human confirm those?
- Is every mutating tool idempotent, given that duplicate calls are normal?
- Does the tool check the user's permissions, or trust the model's intent?
Mindset
Design an agent from its worst call outward. Sort the tools by blast radius, put the authority in code at the boundary, and reserve the human click for the one row where a mistake cannot be undone.
Where it connects
Phase 4 · 7 min
Agents & tool use
A loop where the model picks a tool and your code decides whether to run it, and every interesting problem is in the loop rather than in the model.
Phase 4 · 6 min
Failure modes
The failures that matter here do not raise exceptions — they return 200 with the wrong thing — so the defences are structural rather than reactive.
Got the shape of it?
Examples do not count toward phase progress — that stays on the topics. This is just so the list remembers what you have seen.