External Services
Halos integrates with a range of external services for AI, storage, communication, and data access. This page documents each integration and its role.
Core Infrastructure
Supabase
Role: Database, authentication, realtime subscriptions
- PostgreSQL with Row Level Security
- Auth (email/password + OAuth)
- Realtime for live feed updates
- RPC functions for atomic operations
Pinecone
Role: Vector database for semantic search (RAG)
- Index:
agents(configurable viaPINECONE_INDEX) - Namespace:
user:{userId}(per-user isolation) - Dimensions: 1536 (OpenAI text-embedding-3-small)
- Used by:
knowledge_searchtool, memory extraction, onboarding context
Vercel
Role: Hosting and serverless compute
- Next.js app deployed on Vercel
- API routes run as serverless functions (60s max duration)
- Streaming responses via
streamText()
AI Providers
Anthropic
Role: Primary LLM provider
- Models: Claude Sonnet 4, Haiku 4.5, Opus 4.6
- Used for: Agent chat, greetings, knowledge extraction, onboarding
- Env:
ANTHROPIC_API_KEY
OpenAI
Role: Embeddings + alternative LLM
- Embeddings:
text-embedding-3-small(1536 dimensions) - Models: GPT-4o, GPT-4o-mini, GPT-4.1
- Used for: Vector embeddings, optional agent model
- Env:
OPENAI_API_KEY
Role: Alternative LLM provider
- Models: Gemini 2.0 Flash, 2.5 Pro, 2.5 Flash
- Env:
GOOGLE_GENERATIVE_AI_API_KEY
Communication
Resend
Role: Email delivery and inbound processing for agent inboxes
- Each agent gets a unique email address (e.g.
travel-ad67cd@mail.halos.sh) - Agents can send and receive emails
- Inbound emails stored in
agent_emailstable with image analysis - Env:
RESEND_API_KEY
ElevenLabs
Role: Text-to-speech for agent voice calls
- Model:
eleven_flash_v2_5 - Each agent can have a unique voice (
voice_idin agents table) - Used by: Voice call feature, Telegram voice messages
- Env:
ELEVENLABS_API_KEY
Data Extraction
Firecrawl
Role: Web page content extraction
- Endpoint:
https://api.firecrawl.dev/v1/scrape - Extracts page content as markdown
- Used by:
web_scrapetool, onboarding link scraping (LinkedIn, GitHub, any URL) - Env:
FIRECRAWL_API_KEY
Apify
Role: Social media profile scraping
- Twitter/X scraper:
apidojo~twitter-user-scraper - Instagram scraper:
instagram-scraper~instagram-profile-scraper - Used during: Onboarding (auto-scrape shared social links)
- Env:
APIFY_API_TOKEN
Brave Search
Role: Web search
- Endpoint:
https://api.search.brave.com/res/v1/web/search - Returns top results with titles, URLs, descriptions
- Used by:
web_searchtool - Env:
BRAVE_API_KEY
OAuth Integrations
These are connected per-user via OAuth flows. Tokens are encrypted at rest in the user_integrations table.
Google (Gmail + Calendar)
Scopes:
gmail.readonly— Read inboxcalendar.readonly— Read eventscalendar.events— Create/modify eventsuserinfo.email— Get user email
Tools powered: read_emails, read_calendar, create_event
Env: GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET
Notion
Scopes: read_content, update_content, insert_content
Tools powered: notion_read, notion_write
Features:
- Auto-creates "Agents" folder on connection
- Stores
workspace_idandagents_folder_idin metadata
Slack
Scopes: channels:read, chat:write, users:read, groups:read
Status: Connected but not yet exposed as agent tools (planned)
GitHub
Scopes: repo, read:user, user:email
Status: Connected but not yet exposed as agent tools (planned)
Environment Variables Summary
| Variable | Required | Service |
|----------|----------|---------|
| ANTHROPIC_API_KEY | Yes | Claude models |
| OPENAI_API_KEY | Yes | Embeddings + GPT models |
| PINECONE_API_KEY | Yes | Vector database |
| PINECONE_INDEX | No | Index name (default: agents) |
| MAILGUN_API_KEY | Yes | Agent email |
| MAILGUN_DOMAIN | Yes | Email domain |
| AGENT_EMAIL_DOMAIN | Yes | Agent email domain |
| FIRECRAWL_API_KEY | Recommended | URL scraping + web_scrape tool |
| BRAVE_API_KEY | Recommended | web_search tool |
| APIFY_API_TOKEN | Optional | Social scraping during onboarding |
| ELEVENLABS_API_KEY | Optional | Agent voice |
| GOOGLE_CLIENT_ID | Optional | Gmail/Calendar OAuth |
| GOOGLE_CLIENT_SECRET | Optional | Gmail/Calendar OAuth |
| GOOGLE_GENERATIVE_AI_API_KEY | Optional | Gemini models |
| CRON_SECRET | Yes | Cron endpoint auth |
| ENCRYPTION_KEY | Yes | Token encryption |