Skip to content

Latest commit

 

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Avelero Outreach Pipeline: Autonomous IP-Licensing Sales Sweep

Project Overview

Avelero is being wound down, and its codebase — the fashion Digital Product Passport (DPP) platform, the ESPResso footprint engine (carbon + water estimation from partial supply-chain data), and the surrounding tooling — is for sale. The problem this project solves is coverage: getting a credible acquisition/licensing offer in front of as many buyers as possible before the window closes, across email, WhatsApp, contact forms, and LinkedIn, without a human hand-driving each touch. Because the company will not continue operating, there is no competitor to protect — the direct rivals are the hottest buyers, and the same IP can be sold non-exclusively to several of them at once.

This repo is an autonomous outreach routine, modeled closely on the pentest-outreach pipeline. It is a stateless, skills-based Claude Code routine: no server, no database, no long-running process. A scheduled run clones the repo fresh, loads the Markdown skills under .claude/skills/, and executes one full sweep. All state and every channel are external MCP connectors — the routine holds nothing between runs.

The design principle is narrow and bounded: each sweep works exactly one buyer group and sends exactly two cold offers — a hard floor and a hard ceiling — then stops. Every outbound channel defaults to off; going live is a deliberate operator action, not a side effect of running the code.

How It Works

One sweep is a single pass of a lead state machine whose source of truth is the Lead_Gen_Shor enrichment MCP (lead status + cached fields) plus Gmail (thread state and the truth of "actually sent"). The orchestrator (outreach-manager) sequences it:

one sweep  (scheduled routine, stateless — reads state at start, writes it before exit)

   read state ( Lead_Gen_Shor MCP + Gmail label "Licensing outreach" )
        |
        v
   pick ONE buyer group        weighted  G1 0.50 / G2 0.30 / G3 0.20
        |
        v
   lead-finder  -->  source + qualify + resolve 2 leads (verified contact)
        |                         no non-compete filter; drop-don't-retry
        v
   per lead:  outreach-email --> cold-email-quality --> send      [GMAIL_ALLOW_SENDING]
        |                        from moussa@avelero.com, CC raf@, signed "Raf & Moussa"
        v
   additive nudges  (parallel, one-shot, gated on the email being confirmed-sent):
        whatsapp-nudge  |  contactform-nudge  |  linkedin-nudge
        |
        v
   reply-classifier  -->  NOTIFY-ONLY: set status + Telegram ping, never auto-reply
        |
        v
   telegram-notify  -->  operator sweep card
  • Stateless by design. A run starts with no memory of previous runs; it reconstructs everything from the MCP and Gmail, and reconciles ghosts (any lead marked contacted without a confirmed sent message is reverted).
  • Exactly two cold offers per sweep. New intake plus resolved backlog, combined. Once two go out, cold sending stops until the next run.
  • Drop, don't nurse. A lead whose contact can't be resolved in one bounded attempt, whose offer bounced, or that is off-fit is set rejected and replaced — never retried.
  • Notify-only replies. Inbound is classified and a human is pinged; the routine never drafts or sends a response.

Buyer Groups

Each sweep picks exactly one group (weighted). Full fit signals, target lists, contact roles, and per-channel angles live in each group's file under groups/.

Group Who What they buy Weight
G1 Fashion-DPP & footprint incumbents (the competitors) Whole suite and/or the engine 0.50
G2 Cross-vertical DPP platforms + carbon/ESG SaaS The ESPResso engine 0.30
G3 Enterprise ESG / ERP / PLM, retail groups, consultancies Everything (acquisition) 0.20

The shared wedge across every group is what most incumbents lack: water footprint and estimation from partial supply-chain data. G1 is fully targeted; G2's non-fashion targets and G3's acquirer list still want a short verification pass (see Roadmap).

Quick Start

This is not a package you install — it is a scheduled Claude Code routine that runs against live MCP connectors.

1. Connectors (must be configured in the running environment)
Connector Used by For
Lead_Gen_Shor lead-finder, orchestrator lead state, resolve_contact, verify_email
Gmail outreach-email, reply-classifier send/read/label as the Avelero Workspace account (moussa@avelero.com)
WhatsApp whatsapp-nudge send_message to self-declared wa.me links
Browserbase contactform-nudge hosted browser: fill + submit contact forms
LinkedIn linkedin-nudge connect_with_person (note-less request)
Telegram telegram-notify, reply-classifier send_notification (operator pings)
2. Kill switches (environment — all default false)
GMAIL_ALLOW_SENDING=false
WHATSAPP_ALLOW_SENDING=false
CONTACTFORM_ALLOW_SENDING=false
LINKEDIN_ALLOW_SENDING=false

Each channel checks its own switch before sending. Unset or false means that channel's step is skipped and reported — never sent anyway "to test."

3. Schedule the routine

Create a scheduled agent at claude.ai/code/routines pointing at this repo, and paste the contents of ROUTINE_PROMPT.md as its prompt. A cadence of roughly every two hours during active hours mirrors the pentest routine. Each run clones the repo fresh and executes one sweep via the outreach-manager skill.

Usage

The happy path, in order:

  1. Dry-run first. With every *_ALLOW_SENDING=false, trigger one sweep. The orchestrator sequences all stages and produces drafts (not sends). Read the Telegram sweep card.
  2. Verify the drafts — identity (moussa@avelero.com, CC raf@avelero.com, sign-off "Raf & Moussa"), the per-group angle, and the wedge.
  3. Go live deliberately — flip the relevant kill switch(es) to true. The next sweep sends real outreach: two cold offers, one buyer group, plus the additive nudges.
  4. Handle replies yourself. On any inbound reply, the routine sets the lead status and pings Telegram, then stops. A human takes the conversation from there.

Technical Details

Skills (.claude/skills/)

Skill Responsibility
outreach-manager Thin sweep orchestrator; sequences and reconciles, holds no stage logic
lead-finder Group-aware sourcing (named list for G1/G3, live discovery for G2), contact resolution + email verify, the 2-lead cap
outreach-email Per-group cold offer; sends via Gmail (CC raf@), applies the Licensing outreach label
cold-email-quality Headless grade-and-fix meter, run before send
whatsapp-nudge One two-bubble message, only to a published wa.me/api.whatsapp.com link
contactform-nudge One honest submission via Browserbase; skips any CAPTCHA
linkedin-nudge One note-less connect_with_person to the resolved personal profile
reply-classifier Reads Gmail replies, sets status, pings Telegram — never replies
telegram-notify End-of-sweep operator card (state header + counts), no per-lead lists

Lead state machine

qualified --> contact_resolved --> contacted --> (nudged) --> replied | rejected

No recon, scan, authorization, signature, or report stages — those belong to the pentest pipeline this was adapted from and do not apply to an asset sale.

Fixed identity

Every send is from moussa@avelero.com (the Avelero Workspace account, not the personal m.ouallaf007 account), CC raf@avelero.com so a colleague sees all sent mail and replies, signed "Raf & Moussa". Framing is honest — no fabricated urgency, no deceptive subjects.

Shared-MCP isolation

The Lead_Gen_Shor MCP is shared with the pentest pipeline. Licensing leads are tagged pipeline: "licensing" plus their group, and dedup/backlog queries filter on that tag, so the two pipelines never collide on list_leads / get_uncontacted.

Roadmap

  • Verify G2 / G3 targets. G1 is fully grounded; G2's non-fashion DPP platforms and G3's named acquirers still need a short verification pass before those groups run hot.
  • Deliverability. Keep SPF / DKIM / DMARC valid on avelero.com through the wind-down or sends will be spam-filtered.

Disclaimer / License

Built for legitimate B2B outreach on an asset sale. It sends at most one touch per channel per lead, only to self-declared WhatsApp links and named business contacts, never bypasses CAPTCHAs, and honors opt-outs — respect anti-spam norms, GDPR, and CAN-SPAM when running it. Every channel is disabled by default; nothing sends until an operator flips a switch.

Source-available under the PolyForm Noncommercial License 1.0.0 (see LICENSE and NOTICE). © Avelero. Read, run, fork, and modify for noncommercial purposes with attribution; commercial use — selling it, or offering it as a paid or hosted service — is not granted.

About

Autonomous multi-channel B2B outreach pipeline — a stateless Claude Code routine that runs one bounded sales sweep per run over email, WhatsApp, contact-form, and LinkedIn

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages