Project Info
Inspiration
We all have those trips that never made it out of the group chat. Someone’s idea gets ignored, another person’s budget doesn’t match, and before you know it — the whole plan falls apart. Planning a trip that fits everyone’s interests can feel impossible. We wanted to change that. Our goal? To retire those endless, chaotic group chats and bring the fun back to planning. Let’s leave behind the stress, the confusion, and the last-minute cancellations — so you and your friends can focus on what really matters: having an amazing time together. 🌍🎉
What it does
Ever been chilling on Slack, just vibing with your friends 😎, when suddenly someone goes — “Hey, let’s do a trip!” 🏔️🌊🍹 Boom 💥 — energy’s off the charts, everyone’s throwing ideas: “We should go hiking!” ⛰️ “No, beach day!!” 🏖️ “Let’s find the best food spots!” 🍜 “Don’t forget the night markets!” 🌃 The Slack chat’s a chaotic masterpiece of excitement 🎉💬 … and that’s when you call in Travis. 🤖 Meet Travis — Your AI Travel Buddy Travis jumps into your Slack chat 🕵️♂️, reads the whole conversation, and magically figures out: Who’s in the trip gang 🧑🤝🧑 What each person’s vibe is 🧠 What everyone really wants to do 😏 Then — POOF! 💫 — Travis builds a persona and an AI agent for each friend. Each agent negotiates and collaborates (without the group chat chaos 🌀), ensuring everyone’s interests are included. 📝 Shared in Notion — Because Planning Should Be Pretty When Travis is done planning, your itinerary appears in Notion 📒💎 Complete with: ✅ Checkboxes for every activity 🕒 Timelines and travel slots 📍 Location links and notes 💬 Real-time collaboration with your crew You can tick off adventures as you go! Each check = a memory unlocked 🎯✨ 🧩 How We Built It — The Magic Behind Travis.ai ⚙️💡 Travis.ai isn’t just another travel bot — it’s a whole AI ecosystem built to understand your group’s chaos and turn it into harmony. 🎶✨ Here’s how the magic happens 👇 🧠 1. Persona Agents Powered by Letta We used Letta to create persona agents — one for each user in your Slack group chat. Each persona agent learns from your chat history 🗨️: How you text 😄 What you like 🏝️ What you really mean when you say “I’m fine with anything” (spoiler: you’re not 😉) These agents capture everyone’s unique travel style — the foodie 🍜, the explorer 🏕️, the chill one 🧘, and the “let’s make a spreadsheet” person 📊. Once they’ve learned your personalities, they start talking to each other — yep, the agents negotiate like a mini travel council. 🧑⚖️🤝 🗺️ 2. Conflict Mapping & Negotiation Each agent builds an internal conflict map 🕸️ — identifying who wants what, where clashes might happen, and how to find the sweet spot. Travis then acts as a Planner Agent, guiding the group of agents to co-create a travel plan that: Gives everyone at least one activity they’ll love 💖 Minimizes schedule clashes ⚖️ Maximizes group fun 🎢 In short: it’s diplomacy meets vacation planning! 🌍🤝 🔌 3. The MCP Server & Tool Router Magic Once everyone’s done brainstorming their dream trip, Travis switches gears and activates the Planner Agent. Behind the scenes, we’ve got an MCP (Model Context Protocol) server running over Composia’s Tool Router 🧩. This setup connects Slack, Notion, and Bright Data into one smooth system: 💬 Slack → where all the fun starts (the group chat chaos). 🗒️ Notion → where the final itinerary lives (beautiful, editable, and sharable). 🌐 Bright Data → our web-scraping engine that fetches the latest trends, flights, and hotel deals in real-time. ✈️🏨💰 With all that data, Travis doesn’t just plan what to do — it finds the best way to do it.
Challenges we ran into
Integrating brightdata via composio was particularly difficult. Letta
Accomplishments we're proud of
🤝 We successfully got individual persona agents to negotiate and collaborate autonomously — each representing a unique user from the group chat. 🧠 Built a conflict-resolution system that balances everyone’s interests, creating trip plans that make everyone happy (yes, even the indecisive one 😅). 🔗 Integrated Slack, Notion, and Bright Data through our MCP + Tool Router setup — turning scattered ideas into a seamless, data-driven travel plan.
What we learned
🤖 We learned how to design and orchestrate a multi-agent architecture, where each agent has its own goals, personality, and reasoning capabilities. 💬 We explored how to make agents communicate, negotiate, and collaborate effectively — simulating real human dynamics within a digital group. 🧩 We developed a Model Context Protocol (MCP) to seamlessly connect tools and services, enabling agents to pull live data and coordinate across platforms like Slack, Notion, and Bright Data.
What's next
Enhance the agent to pick up Persona more accurately to negotiate a trip.
Travis AI - Letta Agent with Slack Integration
A FastAPI application that integrates Letta AI agents with Slack, providing intelligent conversation capabilities through a single endpoint.
Features
- 🤖 Letta AI Integration: Uses a persistent Letta agent for intelligent conversations
- 💬 Slack Integration: Handles Slack URL verification, message events, and app mentions
- 🔄 Automatic Responses: Posts Letta agent responses back to Slack channels
- 🎯 Smart Filtering: Filters out simple greetings to reduce noise
- 🌐 ngrok Support: Easy deployment with static domain support
- 📝 Comprehensive Logging: Detailed debug information for troubleshooting
Project Structure
travis_ai/
├── letta/
│ ├── create_agent.py # Letta agent manager
│ └── api.py # Legacy API (moved to simple_api.py)
├── slack/
│ └── auth_middleware.py # Slack authentication middleware
├── simple_api.py # Main FastAPI application
├── main.py # Entry point
├── run.py # Simplified startup script
├── test.py # Basic API tests
├── requirements.txt # Python dependencies
├── .env # Environment variables (create this)
└── README.md # This file
Prerequisites
- Python 3.8+
- uv package manager
- ngrok account (for Slack integration)
- Letta AI account
- Slack App with bot token
Setup Instructions
1. Clone and Install Dependencies
# Clone the repository
git clone <your-repo-url>
cd travis_ai
# Install dependencies using uv
uv pip install -r requirements.txt
2. Environment Configuration
Create a .env file in the project root:
# Letta AI Configuration
LETTA_API_KEY=your_letta_api_key_here
# Slack Configuration
SLACK_BOT_TOKEN=xoxb-your-slack-bot-token-here
# Optional: ngrok static domain
NGROK_DOMAIN=your-static-domain.ngrok-free.dev
3. Letta Agent Setup
The application uses a pre-configured Letta agent ID: agent-2ed1f26b-6de6-4d1a-8466-b89e12482f71
If you need to create a new agent, you can use the letta/create_agent.py script:
uv run python letta/create_agent.py
4. Slack App Configuration
- Create a Slack app at api.slack.com/apps
- Add the following OAuth scopes:
app_mentions:readchannels:historychat:writeim:historyim:readim:write
- Subscribe to bot events:
message.channelsapp_mention
- Set the Request URL to your ngrok URL +
/conversation
Running the Application
Option 1: Local Development
# Run locally without ngrok
uv run python simple_api.py
# Or use the main entry point
uv run python main.py
Option 2: With ngrok (for Slack integration)
# Run with ngrok tunneling
uv run python simple_api.py --ngrok
# Or use the main entry point with ngrok
uv run python main.py --ngrok
Option 3: Using the simplified runner
# Local
uv run python run.py
# With ngrok
uv run python run.py --ngrok
API Endpoints
POST /conversation
The main endpoint that handles all interactions:
Slack URL Verification:
{
"type": "url_verification",
"challenge": "challenge_string"
}
Slack Message Events:
{
"type": "event_callback",
"event": {
"type": "message",
"user": "U1234567890",
"text": "Hello, how are you?",
"channel": "C1234567890"
}
}
Direct Conversation:
{
"message": "What is Python programming?"
}
GET /health
Health check endpoint that returns:
{
"status": "healthy",
"message": "Simple Letta Agent API is running",
"agent_id": "agent-2ed1f26b-6de6-4d1a-8466-b89e12482f71"
}
Testing
Run the basic test suite:
uv run python test.py
This will test:
- Health check endpoint
- URL verification
- Simple greeting filtering
- Direct conversation with Letta agent
Slack Integration
Event Types Handled
- URL Verification: Responds to Slack's challenge requests
- Message Events: Processes regular channel messages
- App Mentions: Handles
@botmentions specifically
Message Filtering
The application filters out simple greetings to reduce noise:
hi,hey,hiyagood morning/afternoon/eveningwhat's up,how are youthanks,ok,yes,no
Response Posting
- Responses are automatically posted back to Slack
- Uses threading to keep conversations organized
- Includes comprehensive logging for debugging
Troubleshooting
Common Issues
-
ModuleNotFoundError: Ensure all dependencies are installed with
uv pip install -r requirements.txt -
LETTA_API_KEY not set: Check your
.envfile and ensure the API key is correct -
Slack events not received:
- Verify ngrok is running and accessible
- Check Slack app configuration
- Ensure Request URL points to
/conversation
-
Agent not responding:
- Verify the agent ID is correct
- Check Letta API key permissions
- Review logs for error messages
Debug Logging
The application provides extensive debug logging:
🔍 DEBUG:- Detailed request/response information✅- Successful operations❌- Errors and failures📨- Slack message processing🤖- Letta agent responses
Development
Code Structure
simple_api.py: Main FastAPI application with single endpointletta/create_agent.py: Letta agent management and API interactionsslack/auth_middleware.py: Slack authentication and middlewaremain.py: Application entry point with argument parsingrun.py: Simplified startup script
Key Components
- LettaAgentManager: Handles all Letta API interactions
- Message Filtering: Smart filtering to reduce noise
- Slack Integration: URL verification and event handling
- Response Posting: Automatic Slack message posting
- Error Handling: Comprehensive error handling and logging
Deployment
Local Development
uv run python simple_api.py --ngrok
Production Considerations
- Use a proper WSGI server like Gunicorn
- Set up proper environment variable management
- Configure SSL/TLS for HTTPS
- Use a proper domain instead of ngrok for production
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
License
This project is licensed under the MIT License.
Support
For issues and questions:
- Check the troubleshooting section
- Review the debug logs
- Verify environment configuration
- Test with the provided test suite
Analysis
View
Metric
- 4
- 3
- 1
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- FastAPIIn code
- OpenAIIn code
- PythonIn code
3 of 3 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
203 KB
Source files
23
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
jathinsn27/travis_ai
39 files · 322 KB · @ 0c47541
Structure
Application logic
23 files · 59%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python95%
- Markdown5%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
tool-router/requirements.txt
pypi · 68- aiohappyeyeballs
- aiohttp
- aiosignal
- annotated-doc
- annotated-types
- anyio
- attrs
- bcrypt
- certifi
- cffi
- charset-normalizer
- click
- composio
- composio_core
- composio-client
- composio-openai
- cryptography
- distro
- +50 more
pyproject.toml
pypi · 8- fastapi
- httpx
- letta-client
- pyngrok
- python-dotenv
- requests
- slack-sdk
- uvicorn
requirements.txt
pypi · 7- fastapi
- letta-client
- pyngrok
- python-dotenv
- requests
- slack-sdk
- uvicorn
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.