Intent Outreach
AI outbound prospecting for founders who do their own selling — research → enrich → outreach, in Claude Code, with your own model.
Intent Outreach is a model-agnostic, Claude-Code-native SDR orchestrator. It researches companies, enriches the leads, and drafts personalized outreach — running fully on your machine, with your own data-provider and model keys, and zero Google dependency. Claude is the default model; bring an OpenAI / Grok / Gemini key once it's passed the eval gate.
As a Claude Code plugin, an orchestrator skill (/intent-outreach) dispatches phase sub-agents
(research → enrich → draft) over a bundled MCP server that houses your data-provider APIs — keeping
each phase in its own context while the orchestrator checkpoints with you between stages.
Built for technical founders / indie SaaS & AI startups who do their own outbound — no SDR headcount, no per-seat data tools, you own your keys and your data.
Why it's different
- Local-only. Runs on your machine. No hosted database, no telemetry, no server-side retention.
Run records go to a local JSONL file (
~/.intent-outreach/runs.jsonl). - BYO keys. Connector + model keys live in your environment (or a local file). They're read locally and sent only to each provider's own API — never to us, never to a cloud secret store.
- Deterministic where it matters. Connectors are called in a fixed order in code; the model is called only at two seams (fit-scoring, drafting). The LLM never decides which API to hit.
- A real data model + a hard gate. Every record is a validated value type. Un-validated model output cannot reach storage — it's a compile error, and a CI invariant.
- Model-agnostic, but earned. A provider is "supported" only after it passes golden evals. No silent-quality surprises from a weak model dropping a tool call.
- Pluggable connectors. Ships adapters for Apollo, Hunter, People Data Labs, Exa, Crunchbase, LeadMagic, Clay, Clearbit, and ZoomInfo — and a registry so you can add your own in one file.
Two ways to run it
1. Claude Code plugin (primary)
/plugin marketplace add jeremylongshore/intent-outreach
/plugin install intent-outreach@jeremylongshore
Then invoke the skill (/intent-outreach) with an ICP and some domains. The skill drives the bundled
Intent Outreach MCP server through deterministic Research → Enrich → Outreach phases, checkpoints
with you between each, drafts grounded messages, and saves a validated run locally.
The plugin also ships:
- Phase sub-agents — the orchestrator skill dispatches one per stage via the
Tasktool:outreach-researcher(Phase 1, one per domain — fan-out),outreach-enricher(Phase 2),outreach-drafter(Phase 3, grounded score + draft). Each keeps its own context and calls only the deterministic MCP tools for its stage; the orchestrator aggregates and checkpoints with you. - Companion skills (slash commands) —
/outreach-connectors(which data connectors are configured),/outreach-research(quick Phase-1-only research without a full campaign),/outreach-profile(inspect or scaffold a Report Profile). Each is a focused, user-invocable skill. - A
SessionStarthook that prints a one-line connector-readiness status.
2. Standalone CLI
npm install # only needed to develop/regenerate; the bundle is committed
node bundle/cli.mjs run --icp "B2B SaaS founders doing their own outbound" \
--domains acme.com,globex.com --channel email
node bundle/cli.mjs connectors # which connectors are configured
node bundle/cli.mjs providers # model providers + eval-gate status
bundle/cli.mjs and bundle/server.mjs are committed, dependency-inlined builds (so the plugin runs
on a fresh clone with no node_modules); regenerate them with npm run bundle.
Keys (bring your own)
Set only the providers you want; unset connectors are silently skipped. Apollo + Hunter both have free tiers, so a full campaign can run for $0.
| Env var | Provider | Tier |
|---|---|---|
APOLLO_API_KEY |
Apollo.io — company, people, enrichment | free (50/mo) |
HUNTER_API_KEY |
Hunter.io — email finding/verification | free (50/mo) |
PDL_API_KEY |
People Data Labs — person/company enrichment | free (100/mo) |
EXA_API_KEY |
Exa — web research context | free (1k/mo) |
CRUNCHBASE_API_KEY |
Crunchbase — funding/investors | paid |
LEADMAGIC_API_KEY |
LeadMagic — email + mobile finding | paid |
CLAY_API_KEY + CLAY_WEBHOOK_URL |
Clay — middleware (push-only) | paid |
CLEARBIT_API_KEY |
Clearbit — enrichment | legacy (pre-2024 keys only) |
ZOOMINFO_JWT |
ZoomInfo — enrichment | enterprise |
ANTHROPIC_API_KEY |
Claude (default model) | — |
OPENAI_API_KEY / XAI_API_KEY / GEMINI_API_KEY |
alternate models (eval-gated) | — |
To drive a non-Anthropic model from inside Claude Code, point ANTHROPIC_BASE_URL at an LLM gateway
(LiteLLM/Bifrost). See 000-docs/017-AT-DECR.
Architecture (one screen)
orchestrator skill ─┐ ┌─ research_domain ─┐
→ phase agents ├─► Intent Outreach ──┤ enrich_lead ├─► pipeline_core
(R→E→O, fixed) │ MCP server └─ save_run ─────────┘ (framework-free)
standalone CLI ──────┘ │
├─ connectors/ (registry; 9 adapters)
research() → enrich() : deterministic, fixed connector order ├─ providers.ts (Vercel AI SDK; eval-gated)
score() → draft() : the ONLY LLM calls (structured output) ├─ validator.ts (the gate: Validated<T> brand)
validate → save : un-validated output can't be stored └─ store.ts (local JSONL; never hosted)
pipeline_core/— the framework-free spine (CI-guarded against any Google/cloud import).mcp/server.ts— one stdio MCP server, thin wrapper overpipeline_core.skills/intent-outreach/SKILL.md— the orchestrator skill; dispatches phase agents in fixed order.skills/outreach-{connectors,research,profile}/— focused companion skills (the slash commands).agents/— phase sub-agents (outreach-researcher,outreach-enricher,outreach-drafter).hooks/—SessionStartconnector-readiness hook.prompts/— versioned, eval-gated prompt files.evals/— golden fixtures + scorers; the supported-provider gate.profiles/— Report Profiles: declarative output customization (starter profiles included).
Develop
npm install
npm run typecheck # tsc --noEmit
npm test # vitest
npm run build # → dist/ (also copies prompts/)
npm run mcp # run the MCP server on stdio (tsx)
npx tsx evals/run.ts --offline # the free, deterministic eval gate
License
Intent Solutions Proprietary — see LICENSE.
Built by Jeremy Longshore · intentsolutions.io
No comments yet
Be the first to share your take.