← Intent Outreach

Intent Solutions · Access and Data Plane

What it touches, and where things live

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.

Keys it reads

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.

KeyProviderSent to
ANTHROPIC_API_KEYClaude, the default modelAnthropic's API
APOLLO_API_KEYApollo, company and people searchApollo's API
HUNTER_API_KEYHunter, email finding and verificationHunter's API
PDL_API_KEYPeople Data Labs, enrichmentPeople Data Labs' API
EXA_API_KEYExa, web research contextExa's API
CRUNCHBASE_API_KEYCrunchbase, funding and investorsCrunchbase's API
LEADMAGIC_API_KEYLeadMagic, email and mobile findingLeadMagic's API
CLAY_API_KEY + CLAY_WEBHOOK_URLClay, push-only middlewareThe operator's own Clay webhook
CLEARBIT_API_KEYClearbit, enrichment (pre-2024 keys)Clearbit's API
ZOOMINFO_JWTZoomInfo, enterprise enrichmentZoomInfo's API
OPENAI_API_KEYOpenAI gpt-4o, passed the evaluation gate 2026-08-20OpenAI's API
XAI_API_KEY, GEMINI_API_KEYGrok and Gemini, adapters ready, admitted once an evaluation run passesThat 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.

What it writes

On the operator's machine

  • ~/.intent-outreach/runs.jsonl, the campaign records, one validated run per line, readable with any text tool.
  • An optional local secrets file, if the operator prefers files over environment variables.

Everything it needs, it has locally

  • Storage is a local file; the audit trail travels with the machine.
  • Prompts are versioned files in the repository, so a draft can always be traced to the exact prompt that produced it.
  • The committed bundle runs on a fresh clone; the runtime footprint is Node.

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.

Control and revocation

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