Intent Solutions · Access and Data Plane
The complete surface area: which keys it reads, where each one is sent, and what it writes. Short enough to hand to a security review, specific enough to be checked against the repository.
Each key is read from the operator's environment, or from a local secrets file the operator points at, and is sent only to that provider's own API. Set only what you use; an unset connector skips itself.
| Key | Provider | Sent to |
|---|---|---|
ANTHROPIC_API_KEY | Claude, the default model | Anthropic's API |
APOLLO_API_KEY | Apollo, company and people search | Apollo's API |
HUNTER_API_KEY | Hunter, email finding and verification | Hunter's API |
PDL_API_KEY | People Data Labs, enrichment | People Data Labs' API |
EXA_API_KEY | Exa, web research context | Exa's API |
CRUNCHBASE_API_KEY | Crunchbase, funding and investors | Crunchbase's API |
LEADMAGIC_API_KEY | LeadMagic, email and mobile finding | LeadMagic's API |
CLAY_API_KEY + CLAY_WEBHOOK_URL | Clay, push-only middleware | The operator's own Clay webhook |
CLEARBIT_API_KEY | Clearbit, enrichment (pre-2024 keys) | Clearbit's API |
ZOOMINFO_JWT | ZoomInfo, enterprise enrichment | ZoomInfo's API |
OPENAI_API_KEY | OpenAI gpt-4o, passed the evaluation gate 2026-08-20 | OpenAI's API |
XAI_API_KEY, GEMINI_API_KEY | Grok and Gemini, adapters ready, admitted once an evaluation run passes | That provider's API, once gated in |
Full list including local overrides: .env.example in the repository. Connector adapters read keys through one seam, pipeline_core/secrets.ts, and make requests through one HTTP helper, pipeline_core/http.ts, so the whole egress surface is two files.
On the operator's machine
~/.intent-outreach/runs.jsonl, the campaign records, one validated run per line, readable with any text tool.Everything it needs, it has locally
The gate in front of every draft
Before drafting, every contact passes the compliance gate: do-not-call scrub, TCPA quiet hours, and service area. The gate is pure and clock-injected, which makes it testable, and it fails closed, which means a contact it cannot clear is blocked and recorded with a reason on the run record. Source: pipeline_core/compliance/index.ts, wired ahead of drafting in pipeline_core/pipeline.ts.
Every key can be revoked at its provider at any moment and the system degrades to the connectors that remain. Run records carry the model name, prompt version, and fit score of every message, so any sent draft can be traced back to what produced it. Spend arrives as line items on provider accounts the finance team already governs.
← Back to the executive brief · See a sample run · How it works