Inspiration
Every road trip with friends starts in a messy group chat, and one person ends up doing all the planning: links get lost, nobody agrees on a place to stay, and the driver is the one checking their phone for gas and breakfast. We wanted the whole group to plan together in the chat they already use, and the driver to keep both hands on the wheel.
What it does
Travel Assist AI is a team of 12 AI agents that lives in one ASI:One group chat. You talk to one agent, Atlas (@atlas-guide), and it brings in the right specialist.
Before the trip
- Say "Let's plan a trip" and Atlas shows a trip card. Pick a destination, give your dates and starting city, and bring your friends into the chat.
- StayScout and Local Guide send voting cards of real places. Everyone votes, and the tally is shared.
- Itinerary turns the winning picks into a day-by-day plan.
On the road
- BiteScout finds food nearby, and MenuScout collects each person's order into one group order.
- PayPilot runs the payment through the Fetch Payment Protocol (Stripe test mode, behind an Approve card), and Ledger splits it in Splitwise.
- FuelFox finds gas.
- CareRoute finds urgent care, always starting with the 911 line.
Memories
- Share photos with Atlas and they go into a shared trip album.
- Curator picks the set that looks best together and writes a caption for the group.
Trust
- Every agent signs every action it takes. Say "verify agents" and Atlas re-checks every signature and shows each agent's ID card.
- A double tap never charges or votes twice.
A live trip board shows the itinerary, the vote tallies, the group order, the album, and every agent's work as it happens. Driving mode reads answers aloud.
How we built it
- Fetch.ai:
- 12 uAgents with the Agent Chat Protocol, registered on Agentverse with mailboxes and reached from ASI:One.
- Interactive Cards: the trip starter, voting carousels, the itinerary, a per-person menu, the group order, and payment review.
- The Fetch Payment Protocol, checked against Stripe before a payment completes.
- Convex: the shared memory of stateless agents.
- One trip per chat, so every friend in a group chat joins the same trip, and a restart loses nothing.
- Votes are transactional mutations, and the board is all live
useQuery. - The Presence and Rate Limiter components, file storage for the album, and a scheduled function plus a cron that forget shared locations after 6 hours.
- Factory Droid: structured output for three jobs.
- It routes each message to one of ten intents.
- It writes the itinerary as typed JSON, using only real places and the group's votes.
- It writes photo captions.
- Google Places for real places and routes. A custom Apify actor (
route-buzz-finder) adds review buzz and is the fallback when Places fails. - Next.js for the board and the API the agents call. Cartesia for spoken replies. Stripe (test mode) and Splitwise for paying and splitting.
Challenges we ran into
- Group chats: making several people in one ASI:One chat resolve to the same trip, with the starter shown as the trip lead and each friend ordering for themselves.
- Repeated card taps: ASI:One sometimes sends the same tap twice. We made every action claimed once by an idempotency key, so a vote or a payment never runs twice.
- Location: agents don't receive the user's location, so we look for a place named in the message, then a location the user shared in the last 6 hours, then the trip's starting city.
- Keeping the itinerary honest: Droid may only use real places from Places, and if it fails, we build a plan from the same places.
Accomplishments that we're proud of
- The whole journey runs inside one chat: planning, voting, the itinerary, food, the group order, payment, the split, and the album.
- An automated end-to-end test runs every agent plus two simulated friends. In it, a group went from "Let's plan a trip" to a voted stay and a 3-day itinerary in about 10 messages.
- Signed, verifiable agent actions you can audit from the chat.
What we learned
- A multi-agent system feels simple only when one agent owns the conversation and the others stay behind it.
- Putting all state in Convex made the agents stateless, restartable, and consistent across a whole group.
- Structured output turns an LLM from a chatbot into a dependable router.
What's next for Travel Assist AI
- Real restaurant ordering through POS APIs, and live Stripe payments.
- Hosted agents and a hosted trip board.
- Real-time location from the phone, and hands-free voice in the car.
Feedback for sponsors
- Fetch.ai: we hit a uAgents storage endpoint bug, and ASI:One was slow to show profile renames.
- Convex: built-in row history would make audit logs much easier.
- Factory Droid: streaming structured output would let us show the itinerary as it's written.
Built With
- agentverse
- apify
- asi-one
- cartesia
- convex
- factory-droid
- fetch.ai
- google-maps
- google-places
- json
- next.js
- node.js
- python
- react
- splitwise
- stripe
- tailwindcss
- typescript
- uagents
- websockets
Log in or sign up for Devpost to join the conversation.