Outreach Agent — Repo Digest
The outbound execution engine: discover businesses, request a Commercial Opportunity Profile from the Intelligence Platform, render emails/proposals, and manage a human review/send/outcome workflow. Provider of the Commercial Opportunity & Outreach capability.
What it is
“An execution engine for Inexis Digital’s cold outreach to Australian trade businesses. It discovers
businesses, enriches them, requests a Commercial Opportunity Profile (COP) from the Intelligence Platform,
renders customer-facing artefacts (emails, proposals) from that COP, and manages the review/send/outcome
workflow. Supabase is the system of record.” (CLAUDE.md).
Why it exists
Commercial strategy: “we do not sell website fixes or SEO. The website assessment is a wedge to sell a complete new, industry-informed website on the Inexis Digital platform.” It turns assessment evidence into qualified, prioritised outreach — under a hard governance rule: “nothing is ever auto-sent.”
At a glance
| Field | Value |
|---|---|
| Slug | outreachagent |
| System | applications-agents |
| Architecture layer | Applications & Agents (layer 4) |
| Owner | Azwaan (github.com/azwaanameer/outreachagent) |
| Lifecycle | active |
| Maturity | operational (Phases 1–2 + operational layer done; live send/assessment pending) |
| Stack | Node ESM (plain scripts, no framework), Supabase, Claude subscription CLI |
| Latest commit | Wave-1 hardening: pre-assessment qualification + concurrent opportunity orchestration |
| Last reviewed | 2026-07-06 |
Business capability provided
Commercial Opportunity & Outreach — run cold-outreach campaigns, qualify + assess businesses into a COP, render reputation-led emails/proposals positioning a website replacement, and manage a human review/send/outcome CRM workflow (a manual review queue — nothing is sent automatically).
Technical responsibilities
- Own “business facts, campaigns, CRM workflow, rendered artefacts, and outcomes. It owns no reusable intelligence.”
- Explicitly does not own: reusable intelligence (packs, demos, playbooks, frameworks, templates, skills, benchmarks), the COP contract/CIE instances, or website evidence — those belong to the Intelligence Platform / Website Assessment.
Core concepts
| Concept | Meaning |
|---|---|
| Commercial Opportunity Profile (COP) | The canonical, versioned, structured object: should this business get a new website, and why? Flow evidence → diagnosis → recommendation → solution_blueprint → summary (schema v2, frozen). |
| CIE (Commercial Intelligence Engine) | Deterministic composeCop (pure, rules-based, no LLM), a “temporary tenant” in lib/platform/. |
| Capabilities interface | evaluateCommercialOpportunity() / getCommercialOpportunity() — the only way to reach Platform intelligence. |
| Intelligence Envelope | Confidence + provenance standard on intelligence outputs. |
| One COP, many renderers | Email / proposal / follow-up all render from the same frozen COP. |
Key workflows
Pipeline: prospect → enrich → opportunity → (render) → operations (each a numbered script):
npm run prospect— Outscraper → upsertbusinesses(stagediscovered).npm run enrich— cheerio → email + owner (enriched).npm run opportunity— qualify (deny-list) → concurrentevaluateCommercialOpportunity()→ storecop_ref(qualified/do_not_contact/assessed).npm run draft— COP → Claude →outreach_content(drafted) — only for businesses whose latest COP review isapproved(requireCopApproved).proposal/followup/crm/export; operations:campaign,review,qa,gmail(drafts only),workflow(outcomes). Governance SOP: prospect → enrich → opportunity → review → qa → draft → spot-check → gmail (drafts) → manual send → workflow.
Technologies used
- Node ESM, plain scripts, no framework. Deps:
@supabase/supabase-js,axios,cheerio,googleapis,papaparse,dotenv. - System of record: Supabase (Postgres, service-role only, RLS with no permissive policies).
- AI: Claude via subscription CLI —
lib/claude.jsshellsclaude -pand stripsANTHROPIC_API_KEY(no API key). - Delivery: Gmail API (
gmail.composescope) — drafts only.
Major modules / components
| Module | Responsibility |
|---|---|
pipeline/ |
Numbered stage scripts + operations (campaign, review, cop-review, workflow, gmail, crm, export) |
lib/ |
db.js (data access), supabase.js, claude.js, gmail.js, qualify.js, cli.js |
lib/platform/ |
The tenant CIE — capabilities.js, cie.js, cop-store.js, assessment-client.js |
docs/architecture/ |
Frozen contracts (COP, schema, envelope, capabilities) |
supabase/migrations/ |
User-applied schema |
Capabilities
commercial-opportunity— compose the COP from evidence (provider)outreach-execution— render + review + CRM workflow for cold outreachcampaign-management— discover → enrich → qualify → assess → outreach
Upstream dependencies
| Dependency | Type | Version | Notes |
|---|---|---|---|
| Website Assessment (inexisstudios) | internal-repo (HTTP) | contract v2 | CIE calls ASSESSMENT_API_URL; ASSESSMENT_MODE=mock|live |
| intelproducts | internal-repo (sibling / INTELPRODUCTS_PATH) |
pinned | outreach-messaging skills |
| Supabase | external-service | — | System of record (shared project with inexisstudios) |
| Outscraper / Gmail / Claude CLI | external-service | — | GBP data / delivery / rendering |
| Shared Skills | internal-repo | n/a | business-profile-extractor + engineering |
Downstream consumers
- Human operators — Gmail drafts,
crm-view.csv,email-queue.csv, HTML review dashboards. outreach_outcomes— the Phase-3 learning foundation (captured, not yet consumed).
Major interfaces & integration points
- Capability interface (
lib/platform/capabilities.js):evaluateCommercialOpportunity(),getCommercialOpportunity(),resolveIndustry/Demo. - COP contract (
cop.schema.json, schema_version 2 frozen) + Intelligence Envelope. - Supabase tables owned:
businesses,outreach_campaigns,outreach_campaign_leads(+stage,cop_ref),outreach_content,outreach_activity_log,outreach_outcomes. - Env:
SUPABASE_URL/SERVICE_ROLE_KEY,OUTSCRAPER_API_KEY,ASSESSMENT_API_URL/MODE/KEY,INTELPRODUCTS_PATH.
Reusable assets exposed to other repositories
- The frozen COP contract + JSON Schema and the Intelligence Envelope (confidence + provenance) standard.
- The capability-interface pattern and the
_render.js“one COP, many renderers” harness. - The CIE (
composeCop) — designed to “relocate to the Platform repo unchanged.”
Architectural decisions
No ADR folder; docs/architecture/ holds the “frozen for implementation” contracts and 10 architectural
principles (ownership boundaries, capability-only access, nothing-auto-sent, deterministic COP). These align
with the ecosystem Architecture Principles (deterministic decides; AI explains;
nothing auto-sent).
Architecture snapshot
graph TD
OS[Outscraper GBP] --> P1[prospect → enrich]
P1 --> SB[(Supabase · system of record)]
P1 --> OPP[opportunity: qualify → CIE]
CIE[lib/platform CIE · composeCop] --> OPP
ASSESS[Website Assessment API<br/>inexisstudios] -->|HTTP evidence| CIE
OPP --> COP[(COP · cop_ref · v2 frozen)]
COP --> REV{Human COP review · approve}
REV --> RENDER[render email/proposal<br/>intelproducts skills + Claude CLI]
RENDER --> GM[Gmail drafts · manual send]
GM --> OUT[(outreach_outcomes)]
Current maturity
Operational, with a caveat. “Done: Phase 1 (execution engine + CIE + COP), Phase 2 (proposal/followup/CRM renderers), operational layer (campaign dashboard, COP review, CRM workflow, Gmail drafts, outcomes).” The README checklist is all complete except “Live assessment run + real campaign send.” Phase 3 (learning loops) is latent, not implemented.
Roadmap
Run a live campaign (blocked on upstream assessment completing crawls); Phase 3 learning loops (confidence
calibration, hook/benchmark optimisation) keyed to outreach_outcomes; relocate the CIE to the Platform repo;
build a reusable Target Profile framework.
Known limitations
- ⚠ Live assessment blocker (Jul 2026): the upstream Website Assessment service “accepts crawls but does
not complete them” — “Wave 1 cannot launch on live COPs until the assessment service completes crawls;
ASSESSMENT_MODE=mockworks.” - The CIE is a temporary tenant, not its permanent home.
qualify.jsis a deliberately small deny-list, “not a reusable Target Profile framework (deferred).”
Future opportunities
Close the live loop once the assessment service completes crawls; Phase-3 outcome learning (partly belongs in the Platform); extract the CIE + Target Profile framework into Platform Services (ADR 0005, proposed).
Relationship to the wider AI venture ecosystem
Layer-4 application for Inexis Digital — the outbound counterpart to the inbound
leadplatform. It consumes the Website Assessment
(from inexisstudios) and the Intelligence Products outreach-messaging
skills, and provides the Commercial Opportunity & Outreach
capability. See the Applications & Agents system.
Links
- Source:
github.com/azwaanameer/outreachagent(private) - Capability: Commercial Opportunity & Outreach
- System: Applications & Agents
- Registry row: repo registry