businesses, enriches them, requests a Commercial Opportunity Profile (COP) from the Intelligence Platform,

1Provides5Consumes2Technologies

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):

  1. npm run prospect — Outscraper → upsert businesses (stage discovered).
  2. npm run enrich — cheerio → email + owner (enriched).
  3. npm run opportunityqualify (deny-list) → concurrent evaluateCommercialOpportunity() → store cop_ref (qualified/do_not_contact/assessed).
  4. npm run draft — COP → Claude → outreach_content (drafted) — only for businesses whose latest COP review is approved (requireCopApproved).
  5. 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 CLIlib/claude.js shells claude -p and strips ANTHROPIC_API_KEY (no API key).
  • Delivery: Gmail API (gmail.compose scope) — 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 outreach
  • campaign-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=mock works.”
  • The CIE is a temporary tenant, not its permanent home.
  • qualify.js is 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.