--- name: lead-intelligence description: AI-native lead intelligence and outreach pipeline. Replaces Apollo, Clay, and ZoomInfo with agent-powered signal scoring, mutual ranking, warm path discovery, source-derived voice modeling, and channel-specific outreach across email, LinkedIn, and X. Use when the user wants to find, qualify, and reach high-value contacts. origin: ECC --- # Lead Intelligence Agent-powered lead intelligence pipeline that finds, scores, and reaches high-value contacts through social graph analysis and warm path discovery. ## When to Activate - User wants to find leads or prospects in a specific industry - Building an outreach list for partnerships, sales, or fundraising - Researching who to reach out to and the best path to reach them - User says "find leads", "outreach list", "who should I reach out to", "warm intros" - Needs to score or rank a list of contacts by relevance - Wants to map mutual connections to find warm introduction paths ## Tool Requirements ### Required - **Exa MCP** — Deep web search for people, companies, and signals (`web_search_exa`) - **X API** — Follower/following graph, mutual analysis, recent activity (`X_BEARER_TOKEN`, plus write-context credentials such as `X_CONSUMER_KEY`, `X_CONSUMER_SECRET`, `X_ACCESS_TOKEN`, `X_ACCESS_TOKEN_SECRET`) ### Optional (enhance results) - **LinkedIn** — Direct API if available, otherwise browser control for search, profile inspection, and drafting - **Apollo/Clay API** — For enrichment cross-reference if user has access - **GitHub MCP** — For developer-centric lead qualification - **Apple Mail / Mail.app** — Draft cold or warm email without sending automatically - **Browser control** — For LinkedIn and X when API coverage is missing or constrained ## Pipeline Overview ``` ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ ┌──────────────┐ ┌─────────────────┐ │ 1. Signal │────>│ 2. Mutual │────>│ 3. Warm Path │────>│ 4. Enrich │────>│ 5. Outreach │ │ Scoring │ │ Ranking │ │ Discovery │ │ │ │ Draft │ └─────────────┘ └──────────────┘ └─────────────────┘ └──────────────┘ └─────────────────┘ ``` ## Voice Before Outreach Do not draft outbound from generic sales copy. Run `brand-voice` first whenever the user's voice matters. Reuse its `VOICE PROFILE` instead of re-deriving style ad hoc inside this skill. If live X access is available, pull recent original posts before drafting. If not, use supplied examples or the best repo/site material available. ## Stage 1: Signal Scoring Search for high-signal people in target verticals. Assign a weight to each based on: | Signal | Weight | Source | |--------|--------|--------| | Role/title alignment | 30% | Exa, LinkedIn | | Industry match | 25% | Exa company search | | Recent activity on topic | 20% | X API search, Exa | | Follower count / influence | 10% | X API | | Location proximity | 10% | Exa, LinkedIn | | Engagement with your content | 5% | X API interactions | ### Signal Search Approach ```python # Step 1: Define target parameters target_verticals = ["prediction markets", "AI tooling", "developer tools"] target_roles = ["founder", "CEO", "CTO", "VP Engineering", "investor", "partner"] target_locations = ["San Francisco", "New York", "London", "remote"] # Step 2: Exa deep search for people for vertical in target_verticals: results = web_search_exa( query=f"{vertical} {role} founder CEO", category="company", numResults=20 ) # Score each result # Step 3: X API search for active voices x_search = search_recent_tweets( query="prediction markets OR AI tooling OR developer tools", max_results=100 ) # Extract and score unique authors ``` ## Stage 2: Mutual Ranking For each scored target, analyze the user's social graph to find the warmest path. ### Algorithm 1. Pull user's X following list and LinkedIn connections 2. For each high-signal target, check for shared connections 3. Rank mutuals by: | Factor | Weight | |--------|--------| | Number of connections to targets | 40% — highest weight, most connections = highest rank | | Mutual's current role/company | 20% — decision maker vs individual contributor | | Mutual's location | 15% — same city = easier intro | | Industry alignment | 15% — same vertical = natural intro | | Mutual's X handle / LinkedIn | 10% — identifiability for outreach | ### Weighted Bridge Ranking Treat this as the canonical network-ranking stage for lead intelligence. Do not run a separate graph skill when this stage is enough. Given: - `T` = target leads - `M` = your mutuals / existing connections - `d(m, t)` = shortest hop distance from mutual `m` to target `t` - `w(t)` = target weight from signal scoring Compute the base bridge score for each mutual: ```text B(m) = Σ_{t ∈ T} w(t) · λ^(d(m,t) - 1) ``` Where: - `λ` is the decay factor, usually `0.5` - a direct connection contributes full value - each extra hop halves the contribution For second-order reach, expand one level into the mutual's own network: ```text B_ext(m) = B(m) + α · Σ_{m' ∈ N(m) \\ M} Σ_{t ∈ T} w(t) · λ^(d(m',t)) ``` Where: - `N(m) \\ M` is the set of people the mutual knows that you do not - `α` is the second-order discount, usually `0.3` Then rank by response-adjusted bridge value: ```text R(m) = B_ext(m) · (1 + β · engagement(m)) ``` Where: - `engagement(m)` is a normalized responsiveness score - `β` is the engagement bonus, usually `0.2` Interpretation: - Tier 1: high `R(m)` and direct bridge paths -> warm intro asks - Tier 2: medium `R(m)` and one-hop bridge paths -> conditional intro asks - Tier 3: no viable bridge -> direct cold outreach using the same lead record ### Output Format ``` MUTUAL RANKING REPORT ===================== #1 @mutual_handle (Score: 92) Name: Jane Smith Role: Partner @ Acme Ventures Location: San Francisco Connections to targets: 7 Connected to: @target1, @target2, @target3, @target4, @target5, @target6, @target7 Best intro path: Jane invested in Target1's company #2 @mutual_handle2 (Score: 85) ... ``` ## Stage 3: Warm Path Discovery For each target, find the shortest introduction chain: ``` You ──[follows]──> Mutual A ──[invested in]──> Target Company You ──[follows]──> Mutual B ──[co-founded with]──> Target Person You ──[met at]──> Event ──[also attended]──> Target Person ``` ### Path Types (ordered by warmth) 1. **Direct mutual** — You both follow/know the same person 2. **Portfolio connection** — Mutual invested in or advises target's company 3. **Co-worker/alumni** — Mutual worked at same company or attended same school 4. **Event overlap** — Both attended same conference/program 5. **Content engagement** — Target engaged with mutual's content or vice versa ## Stage 4: Enrichment For each qualified lead, pull: - Full name, current title, company - Company size, funding stage, recent news - Recent X posts (last 30 days) — topics, tone, interests - Mutual interests with user (shared follows, similar content) - Recent company events (product launch, funding round, hiring) ### Enrichment Sources - Exa: company data, news, blog posts - X API: recent tweets, bio, followers - GitHub: open source contributions (for developer-centric leads) - LinkedIn (via browser-use): full profile, experience, education ## Stage 5: Outreach Draft Generate personalized outreach for each lead. The draft should match the source-derived voice profile and the target channel. ### Channel Rules #### Email - Use for the highest-value cold outreach, warm intros, investor outreach, and partnership asks - Default to drafting in Apple Mail / Mail.app when local desktop control is available - Create drafts first, do not send automatically unless the user explicitly asks - Subject line should be plain and specific, not clever #### LinkedIn - Use when the target is active there, when mutual graph context is stronger on LinkedIn, or when email confidence is low - Prefer API access if available - Otherwise use browser control to inspect profiles, recent activity, and draft the message - Keep it shorter than email and avoid fake professional warmth #### X - Use for high-context operator, builder, or investor outreach where public posting behavior matters - Prefer API access for search, timeline, and engagement analysis - Fall back to browser control when needed - DMs and public replies should be much tighter than email and should reference something real from the target's timeline #### Channel Selection Heuristic Pick one primary channel in this order: 1. warm intro by email 2. direct email 3. LinkedIn DM 4. X DM or reply Use multi-channel only when there is a strong reason and the cadence will not feel spammy. ### Warm Intro Request (to mutual) Goal: - one clear ask - one concrete reason this intro makes sense - easy-to-forward blurb if needed Avoid: - overexplaining your company - social-proof stacking - sounding like a fundraiser template ### Direct Cold Outreach (to target) Goal: - open from something specific and recent - explain why the fit is real - make one low-friction ask Avoid: - generic admiration - feature dumping - broad asks like "would love to connect" - forced rhetorical questions ### Execution Pattern For each target, produce: 1. the recommended channel 2. the reason that channel is best 3. the message draft 4. optional follow-up draft 5. if email is the chosen channel and Apple Mail is available, create a draft instead of only returning text If browser control is available: - LinkedIn: inspect target profile, recent activity, and mutual context, then draft or prepare the message - X: inspect recent posts or replies, then draft DM or public reply language If desktop automation is available: - Apple Mail: create draft email with subject, body, and recipient Do not send messages automatically without explicit user approval. ### Anti-Patterns - generic templates with no personalization - long paragraphs explaining your whole company - multiple asks in one message - fake familiarity without specifics - bulk-sent messages with visible merge fields - identical copy reused for email, LinkedIn, and X - platform-shaped slop instead of the author's actual voice ## Configuration Users should set these environment variables: ```bash # Required export X_BEARER_TOKEN="..." export X_ACCESS_TOKEN="..." export X_ACCESS_TOKEN_SECRET="..." export X_CONSUMER_KEY="..." export X_CONSUMER_SECRET="..." export EXA_API_KEY="..." # Optional export LINKEDIN_COOKIE="..." # For browser-use LinkedIn access export APOLLO_API_KEY="..." # For Apollo enrichment ``` ## Agents This skill includes specialized agents in the `agents/` subdirectory: - **signal-scorer** — Searches and ranks prospects by relevance signals - **mutual-mapper** — Maps social graph connections and finds warm paths - **enrichment-agent** — Pulls detailed profile and company data - **outreach-drafter** — Generates personalized messages ## Example Usage ``` User: find me the top 20 people in prediction markets I should reach out to Agent workflow: 1. signal-scorer searches Exa and X for prediction market leaders 2. mutual-mapper checks user's X graph for shared connections 3. enrichment-agent pulls company data and recent activity 4. outreach-drafter generates personalized messages for top ranked leads Output: Ranked list with warm paths, voice profile summary, and channel-specific outreach drafts or drafts-in-app ``` ## Related Skills - `brand-voice` for canonical voice capture - `connections-optimizer` for review-first network pruning and expansion before outreach