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.
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
contactedwithout 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
rejectedand replaced — never retried. - Notify-only replies. Inbound is classified and a human is pinged; the routine never drafts or sends a response.
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).
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=falseEach 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.
The happy path, in order:
- 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. - Verify the drafts — identity (
moussa@avelero.com, CCraf@avelero.com, sign-off "Raf & Moussa"), the per-group angle, and the wedge. - 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. - 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.
| 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 |
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.
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.
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.
- 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.comthrough the wind-down or sends will be spam-filtered.
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.