Agent integration pattern
Every agent in ODAI follows the same structural pattern: a set of functions decorated with@function_tool and an Agent instance that exposes them.
@function_tool
The @function_tool decorator registers a function as a callable tool within the OpenAI Agents framework. The optional is_enabled parameter accepts a callable that receives the current RunContextWrapper and returns a boolean — this lets agents gate tools based on user permissions (e.g. whether Google OAuth or Plaid is connected).
ToolResponse
Every tool function returns a ToolResponse serialized to a dict. The key fields are:
| Field | Description |
|---|---|
response_type | A string identifier for the type of data returned (e.g. "yelp_search") |
agent_name | Internal agent identifier |
friendly_name | Human-readable label shown in the UI |
display_response | When False, the tool output is not forwarded to the WebSocket client |
response | The actual payload data |
Agent categories
ODAI includes 35+ agents organized into eight categories.Communication & Productivity
- Gmail Agent — send, receive, search, and reply to email
- Google Calendar Agent — create and manage calendar events
- Google Docs Agent — create and search documents
- Slack Agent — team messaging integration
- Twilio Assistant — voice and SMS capabilities
Information & Search
- Google Search Agent — web search via SerpAPI
- Google News Agent — top headlines and topic search
- Fetch Website Agent — extract content from URLs
- Google Shopping Agent — product search and price comparison
Financial Services
- Plaid Agent — bank account balances and transactions
- Plaid Connector Agent — guided account connection flow
- FinnHub Agent — stock prices and financial statements
- CoinMarketCap Agent — cryptocurrency prices and market data
- Exchange Rate Agent — currency conversion
Travel & Transportation
- FlightAware Agent — real-time flight status and tracking
- Flights Agent — IATA code lookups and airport info
- AMADEUS Agent — flight and hotel search
- Amtrak Agent — train status and schedules
- Caltrain Agent — regional Bay Area train information
Local Services & Entertainment
- Yelp Agent — restaurant and business search with reviews
- TripAdvisor Agent — travel recommendations and reviews
- Ticketmaster Agent — event tickets and venue details
- MovieGlu Agent — showtimes and theater search
Weather & Location
- AccuWeather Agent — hourly and daily forecasts by coordinates
- WeatherAPI Agent — current conditions and multi-day forecasts
- Location Service — IP-based location detection
E-commerce & Shopping
- Amazon Agent — product search and detail lookup
- Google Shopping Agent — cross-retailer product comparison
Utilities & Tools
- EasyPost Agent — package tracking across carriers
- Open External URL Agent — open URLs in a browser window or tab
- Google Connections Agent — Google account OAuth setup
Agent registration
Adding a new agent to ODAI involves four steps:Implement the agent file
Create a connector file in
connectors/ with @function_tool-decorated functions and an Agent instance exported as a module-level constant (e.g. MY_AGENT).Import into the orchestrator
Add the import and include the agent in the
handoffs list in connectors/orchestrator.py.Map tool call messages
Add each tool function name to the
TOOL_CALLS dict in connectors/orchestrator.py with a user-facing progress string (e.g. "Searching Yelp..."). Set the value to None for internal tools that should not surface a progress message.Voice agent variants
Several agents expose aREALTIME_* variant alongside their standard version. These variants are registered in connectors/voice_orchestrator.py and are optimized for real-time speech: concise response formatting, no markdown, and faster execution. See Voice Interface for details.