agentleFS
corebits-iocorebits-io/deal-origination-system/skills/outreach-sequencer/SKILL.md

outreach-sequencer

Skill1 starsChanged 3 months agoMITView on GitHub

Build and stage multi-touch owner outreach sequences across email, LinkedIn, and posted letters, with send caps, suppression rules, and a human approval gate. Stages the queue. Never sends. Triggers on: build sequence, outreach sequence, follow-up sequence, schedule outreach, campaign sequence, send cadence, multi-touch campaign, stage outreach, outreach campaign, follow up plan, owner campaign.

The file

We split this skill into the rules it gives an agent

10 rules. About 0 are common, 8 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈8

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    All four must be true. Stop if any is not.

    line 21
  2. Distinctive:

    Remove from the queue, in this order.

    line 41
  3. Very specific:

    inferred-DO-NOT-USE is never sendable: Not once, not for a Strong Fit.

    line 53
  4. Distinctive:

    Default shape: 3 to 5 touches over 4 to 6 weeks.

    line 61
  5. Distinctive:

    No guilt language. No "I noticed you haven't replied"

    line 92
  6. Distinctive:

    After the last touch, mark dormant with a revisit date.

    line 97
  7. Very specific:

    Every row starts with status = staged.

    line 128
  8. Distinctive:

    Never claim anything was sent: Never imply it. If the user asks you to send, explain that you stage and they send, and offer the export.

    line 155
  9. Distinctive:

    Start with 20 to 30 owners, not the whole list: Read the reply data, fix the copy, then scale.

    line 194
  10. Distinctive:

    Send your Strong Fits last: Test on segment C first. Your best targets deserve your best-tested message.

    line 197

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Outreach Sequencer

Turns approved copy and a qualified target list into a staged, scheduled send queue.

This skill never sends anything. It builds the queue, applies the rules, and hands it to you. Sending is a separate, explicit, human action. An automated send loop attached to a language model and a conversation about someone's life's work is a bad idea everywhere. See references/compliance-and-ethics.md.


Step 0 — Preconditions

All four must be true. Stop if any is not.

  1. thesis-profile.md exists, with senders (section 9) and compliance notes (section 10) filled in, not TBD. If it does not exist, stop and walk the user through creating it from templates/thesis-profile.md.
  2. targets.csv is scored and enriched
  3. Approved copy exists in outreach/
  4. Contact routes exist with an email_status

🚧 HARD GATE — compliance

  • Confirm the user has read references/compliance-and-ethics.md
  • Confirm jurisdiction rules from section 10: GDPR/PECR for EU/UK owners, CAN-SPAM, CASL for Canada. Opt-out handling is permanent everywhere.
  • Confirm the sending domain is separate from the buyer's primary domain

Step 1 — Apply suppression

Remove from the queue, in this order. Report the count for each.

RuleRemoves
Do-not-contactAnyone who ever opted out. Permanent, never expires.
Warm path existswarm_path is populated. They get an intro, not a cold message.
Already in pipelineAny open conversation in pipeline.csv
Not a Fit / Near MissBelow-the-line fit_score
Unsendable emailemail_status is inferred-DO-NOT-USE or Not found (letter track may still apply)
No routeNo sendable email, no LinkedIn URL, no mailing address
Contacted recentlyTouched in the last 90 days on any channel

inferred-DO-NOT-USE is never sendable. Not once, not for a Strong Fit. A bounce spike on a young sending domain can end your ability to send email at all.


Step 2 — Build the sequence

Default shape: 3 to 5 touches over 4 to 6 weeks. Owners move slowly and that is fine. A fast cadence reads as a broker blast; a patient one reads as a serious buyer. Do not exceed five touches.

Email track (primary)

TouchDayAction
10Opening email, under 120 words
2+7Follow-up, shorter, one new fact about the buyer or thesis
3+16Different angle, shorter again
4+28Short close-out. "No response needed. If timing is ever right, my details are below."

Letter track (offline owners — no email, published address only)

TouchDayAction
10Posted letter, under one page, marked private and confidential
2+21One follow-up letter or a call to the published number

LinkedIn track (where the owner is actually active)

TouchDayAction
10Connect note, under 300 chars
2+7 after acceptShort message, then stop

Rules

  • Each follow-up is shorter than the one before
  • Each adds one new piece of information. Never just "bumping this"
  • No guilt language. No "I noticed you haven't replied"
  • Nothing in a subject line or envelope that reveals a possible sale to whoever opens the mail
  • Stop the entire sequence the moment anyone replies
  • Stop permanently on any opt-out, on every channel at once
  • After the last touch, mark dormant with a revisit date. Silence from an owner is a not-now, not a no

Step 3 — Apply send caps

Volume discipline is deliverability, and with owners it is also reputation. These markets are small and owners talk to each other.

SettingDefaultNotes
Emails per sender per day15 to 25New domain: start at 10
Letters per weekAs printing allowsQuality over volume
Domain warmup2 to 3 weeksBefore any real volume
Sending domainSeparate from your primaryNever send cold from your main domain

Spread sends across business hours in the recipient's timezone. Never send in one burst.


Step 4 — Stage the queue

Write outreach/queue.csv:

send_date,sender,channel,company,contact_name,email,linkedin_url,
segment,touch_number,message_variant,message_body,status

Every row starts with status = staged. Nothing is sent until a human moves it there after actually sending.

Also write outreach/schedule.md — a day-by-day view the user can actually read and sanity check, with the letter track listed separately.


Step 5 — The send gate

🚧 HARD GATE — the important one

Present:

  • Total messages staged, broken down by day, sender, and channel
  • Suppression counts with reasons
  • The first ten messages in full, exactly as they would send
  • The daily volume per sender, against the cap
  • Confirmation that the sending domain is not the primary domain
  • Confirmation that the do-not-contact list is suppressed

Then say plainly:

This queue is staged, not sent. Nothing has gone out. To send, export the queue to your sending tool, or send manually from the schedule. I do not have send access and will not send on your behalf.

Never claim anything was sent. Never imply it. If the user asks you to send, explain that you stage and they send, and offer the export.


Step 6 — Report

Sequence staged — not sent

Eligible after suppression:  71 of 118

Suppressed:
  Warm path exists           6  → routed to intro requests
  Email unsendable          24  (11 of these have a letter route instead)
  No route at all           10
  Already in pipeline        4
  Below-the-line fit         2
  Do-not-contact             1

Queue: 71 owners, 4 touches, 246 messages over 34 days

  Email track      58 owners   sender: [principal]
  Letter track     11 owners   (manual print and post)
  LinkedIn track    2 owners

Peak daily volume:  22 per sender  (cap: 25) ✓
Sending domain:     [separate domain confirmed] ✓
Do-not-contact suppressed ✓

Written to: outreach/queue.csv, outreach/schedule.md

Nothing sent. Export to your sending tool when ready.

Notes

  • Start with 20 to 30 owners, not the whole list. Read the reply data, fix the copy, then scale. Burning your best targets on untested copy is the most expensive mistake available at this stage.
  • Send your Strong Fits last. Test on segment C first. Your best targets deserve your best-tested message.
  • Stop everything on reply. Route to reply-classification.
  • Log every send to pipeline.csv. An untracked send is a send you will repeat by accident, to someone who remembers.
  • Watch bounce rate. Above 3%, stop and re-verify. Above 5%, stop entirely and fix the list before you lose the domain.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.