Overview
The agent swarm orchestrator coordinates parallel research across multiple platforms and data sources. Once a person is identified, the system launches 6+ specialized Browser Use agents simultaneously to gather comprehensive intelligence. Location:backend/agents/orchestrator.py
Two-Phase Architecture
Implementation
Research Orchestrator
Phase 1: Static Agents + Exa
Phase 2: Dynamic URL Scrapers
After static agents complete, spawn specialized scrapers for high-value URLs discovered by Exa/Google.Static Agents
LinkedIn Agent
Location:backend/agents/linkedin_agent.py
Strategy: Voyager API interception (fastest) → Browser scraping fallback
Speed: 2-5 seconds per profile
- Full name, headline, location
- Current company and title
- About/summary section
- Experience (last 3 roles with companies and dates)
- Education
- Skills (top 5)
- Connection/follower count
Twitter/X Agent
Location:backend/agents/twitter_agent.py
Strategy: twscrape GraphQL (fastest) → Browser scraping fallback
Speed: 2-5 seconds per profile
- Username, display name, bio
- Follower/following counts
- Verification status
- Location, website
- Recent tweets (last 5)
Instagram Agent
Location:backend/agents/instagram_agent.py
Strategy: Browser scraping only (no API available)
Speed: 20-40 seconds per profile
- No API access
- Must navigate full web UI
- Often requires bypassing login walls
- Rate-limited by Instagram’s anti-bot measures
Google Agent
Location:backend/agents/google_agent.py
Strategy: Browser-based web search + snippet extraction
Speed: 3-8 seconds
OSINT Agent
Location:backend/agents/osint_agent.py
Strategy: Sherlock username enumeration across 400+ sites
Speed: 10-20 seconds
- Converts “Jane Smith” → “janesmith”, “jane.smith”, “jane_smith”
- Checks 400+ sites in parallel
- Returns only confirmed accounts
Exa API Integration
Location:backend/enrichment/exa_client.py
Why Exa?
- 200ms average response time
- Structured person/company search
- Returns LinkedIn URLs directly
- Provides context for other agents
- Direct LinkedIn profile URLs (skips search step for LinkedIn agent)
- Company websites
- News articles mentioning the person
- Social media profile URLs
- Context for Phase 2 dynamic scrapers
Inbox Pool for Login Walls
Location:backend/agents/agentmail_client.py
Many sites require email verification to view content. The inbox pool pre-creates temporary email addresses using AgentMail.
Result Streaming
Results stream to Convex as agents complete, enabling real-time frontend updates.Performance Characteristics
Phase 1 Timeline (90-second timeout):| Agent | Typical Duration | Success Rate |
|---|---|---|
| Exa API | 200ms | 95% |
| LinkedIn Agent | 2-5s | 80% |
| Twitter Agent | 2-5s | 70% |
| Instagram Agent | 20-40s | 60% |
| Google Agent | 3-8s | 95% |
| OSINT Agent | 10-20s | 85% |
| Social Agent | 5-10s | 75% |
| Darkweb Agent | 30-60s | 40% |
- Dynamic scrapers: 10-30s each
- Limited to 3 concurrent scrapers
- Only spawned if Phase 1 leaves >15s remaining
Error Handling
Observability
Laminar Tracing:Next Steps
Real-Time Streaming
How agent results stream to the frontend in real-time
Architecture
Full system architecture and component integration