Discover → enrich → ICP-score → draft → send → notify. One click, running now.
Apollo for discovery, Clay for enrichment, a spreadsheet for scoring, a prompt in ChatGPT for writing, a sending tool, and a webhook to notify. Each one is a seam that breaks.
A 100-step Zap fires three times a day, silently fails on step 47, and leaves half the batch un-drafted — no trace, no retry.
Discovery API calls, enrichment credits, LLM tokens, email sends — each tool bills separately. When the invoice hits, nobody can reconstruct which run burned which dollars.
The tribal "how we actually run outbound" lives in a senior rep's head. Onboarding takes weeks to re-derive.
Outbound Agent reads us/market/icp.md + us/brand/voice.md, runs doc-leads-discover → enrich_company → qualify-icp → enrich_contact → draft_create → send_email → notify. One file, one agent, one click.
Max 10 companies per run. Max 5 actual sends per run. Apify and SES spend are predictable before the run starts. No runaway loops.
Every send is preceded by a draft file in drafts/. You can always rewind and see exactly what went out, to whom, with what body.
Default is approval-gated. Flip the Auto-send toggle in /outreach once you trust the drafts and future runs ship immediately. Skills can override per-call.
Say "run this every weekday at 9am" in chat — the agent calls trigger_create and a cron appears in /triggers. No separate automation tool.
When a run finishes, Notification Center pops with the count of drafts and sends. You don't need to be in the app to know it worked.
The agent reads us/market/icp.md every run. Edit it once, every future round respects the change. No Zap to rebuild, no playbook to migrate.
us/brand/voice.md and us/brand/messaging.md shape every draft. "No forbidden words" and tone rules are hard constraints, not post-hoc edits.
Apify costs ~$0.02–0.05 per company. SES is $0.0001 per email. A 10-company 5-send run rarely crosses $0.50. Runs log tokens + cost to /runs for receipts.
ICP signals from us/market/icp.md become Google queries ("site:github.com mkdocs.yml inurl:docs", etc). Cap 5 queries per run, dedup by domain.
enrich_contact with role filter finds buyer-persona emails. Falls back to enrich_contact_linkedin (EnrichLayer) for LinkedIn URLs.
BYOK. SigV4 request signing in pure Node (no AWS SDK). Least-privilege ses:SendEmail IAM action. Your domain, your deliverability.
For contacts without email but with a LinkedIn URL, drafts a DM routed through Unipile — no li_at cookie, no ToS-grey-area automation.
Point-of-run check for Apify + SES keys, us/market/icp.md filled, us/brand/voice.md filled. One-click fixes in the modal. Run disabled until green.
Checks companies/<slug>.md frontmatter last_outbound_at before drafting. Re-engagement logic stays separate from cold.
Apify + Amazon SES connected in Integrations, plus us/market/icp.md and us/brand/voice.md filled out. Pre-flight catches all of this before the run starts and offers inline fixes.
Approval-gated by default. Flip the Auto-send toggle in /outreach once you trust the drafts; future runs ship immediately. Skills can override per-call via draft_create({ auto: true }).
Yes. Say "run this every weekday at 9am" in chat — the agent calls trigger_create and the cron shows up in /triggers. Or make the trigger yourself.
Reads are opportunistic: if HubSpot / Salesforce / Attio is connected, it pulls existing company records. Writes go to the local vault (companies/, contacts/) first; CRM sync is a separate pipeline.
Apify ~$0.02–0.05 × 10 companies = $0.20–0.50. SES $0.0001 × 5 emails = negligible. LLM tokens via your credits. Typical run: under $0.50. The hard caps (10/5) make this a ceiling, not a hope.