Inspiration
On a trip through Switzerland, I counted the questions a traveler answers in a single day: which train, which transfer, when to leave, what to do with a free hour. Dozens of micro-decisions, all day, every day. Chat assistants only help if you think to ask — so the cognitive load never goes away. I wanted an agent that carries the trip so the traveler doesn't have to. That turned out to be close to how this hackathon's own Everyday Agents track describes its goal — an agent that runs quietly and pings you only when there's a real decision to make. I found that phrasing after the core design was already built, which felt like a good sign I was solving the right problem.
What it does
Travel Autopilot holds the whole trip — flights, hotels, trains, activities, current time and location — as a single TripState for anyone juggling a multi-leg personal trip, and runs an autonomous loop over it: observe → compute facts → judge → act or stay silent. It detects booking conflicts ("No accommodation found for August 19") and blocks itinerary planning until they're resolved; it ingests booking confirmations by drag-and-drop (.eml, PDF, or a screenshot — the model reads them directly); it recognizes unexpected free time and, when asked, searches the web for suggestions that fit the location, the time window, and the next fixed commitment; and it computes flight lead times and interrupts exactly once, when it's time to leave for the airport. When nothing needs attention it does nothing: silence is a successful agent action.
How we built it
The agent is built on the Strands Agents SDK with Amazon Bedrock (Claude) as the model, holding five tools: get_trip_state, update_trip_state, check_next_event, search_web, notify_user. The core design rule: LLMs never do arithmetic; Python never guesses. Deterministic, unit-tested Python computes every fact (schedule overlaps, accommodation gaps, departure lead times, free-time windows); the LLM makes judgments — whether to interrupt, whether fresh external information is needed, how to phrase advice. Bedrock's multimodal Converse API reads PDFs and screenshots of bookings into validated Pydantic records. A FastAPI + single-page UI shows the itinerary timeline and the agent's notifications. The agent deploys to Amazon Bedrock AgentCore Runtime.
Challenges we ran into
Getting an agent to not act is harder than getting it to act. We moved every threshold decision into deterministic code and instructed the agent that silence is preferred — then verified with tests that a healthy trip produces zero alerts. Subtle domain logic also bit us: overnight flights looked like missing hotel nights, and 25-hour overnight "free time" looked like an opportunity, until the rules learned what real travel looks like.
Accomplishments that we're proud of
A demo where every scenario runs through real business logic — nothing is hardcoded; 50+ unit tests that run without a single LLM call; and a booking-ingestion flow where dropping one email visibly heals a broken itinerary.
What we learned
The value of an "agent" isn't the conversation — it's the judgment about when a conversation is even necessary. Splitting fact-computation (deterministic) from judgment (LLM) made the system cheaper, testable, and more trustworthy.
What's next for Travel Autopilot
Continuous background monitoring with push notifications, phone GPS for automatic situation updates, email forwarding for zero-touch booking ingestion, and multi-trip support.
Bonus: Builder Center posts (Agents for Humans series)
Built With
- bedrock
- bedrockagentcore
- cdk
- claude
- python
- strands
Log in or sign up for Devpost to join the conversation.