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;
OpenAI (gpt-4o) is eval-gated in — bring an OPENAI_API_KEY and it just works. Grok / Gemini
adapters ship ready and gate in the same way once an eval run with a real key passes.
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.
- 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 supported local configuration). 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.
- Vertical packs + a compliance gate. A pack composes a fail-closed compliance gate (DNC, TCPA
quiet hours, service area) with versioned prompts over the same engine; blocked contacts are
recorded, never drafted.
b2b-sdrships as the default.
/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
Agenttool: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.
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 statusbundle/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.
Set only the providers you want; unset connectors are skipped. Provider access, pricing, and quotas
change independently, so use /outreach-connectors for the repository's current runtime notes and
confirm commercial terms with the provider before a campaign.
| Env var | Provider | Tier |
|---|---|---|
APOLLO_API_KEY |
Apollo.io — company, people, enrichment | registry: free |
HUNTER_API_KEY |
Hunter.io — email finding/verification | registry: free |
PDL_API_KEY |
People Data Labs — person/company enrichment | registry: free |
EXA_API_KEY |
Exa — web research context | registry: free |
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 | registry: legacy |
ZOOMINFO_JWT |
ZoomInfo — enrichment | enterprise |
ANTHROPIC_API_KEY |
Claude (default model, eval-gated ✓) | — |
OPENAI_API_KEY |
OpenAI gpt-4o (eval-gated ✓ 2026-08-20) | — |
XAI_API_KEY / GEMINI_API_KEY |
Grok / Gemini (adapters ready; gate pending an eval run) | — |
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.
orchestrator skill ─┐ ┌─ list_connectors ──┐
→ phase agents ├─► Intent Outreach ──┤ research_domain ├─► pipeline_core
(R→E→O, fixed) │ MCP server │ enrich_lead │ (framework-free)
standalone CLI ──────┘ └─ save_run ──────────┘
│
├─ 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 Profile schema and starters. The skill path automatically maps channel, score threshold, contacts-per-lead, and style; renderer and delivery helpers are separate APIs.
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 gateIntent Solutions Proprietary — see LICENSE.
Built by Jeremy Longshore · intentsolutions.io