Agent skill
outbound-framework
A table-driven framework for B2B cold email campaigns.
Filed under Outbound email.
From lbarberis/gtm-skills · 7 skill entries · 0 · pushed 2026-09-26
What it does when it runs
A table-driven framework for B2B cold email campaigns. Forces structured thinking through a fixed chain of tables (brief intake, ICP matrix, relevance test, proof inventory, subject check, email build, follow-up sequence, pre-send QA, weekly review) before any copy is written. Use this skill whenever anyone on the team asks to write, plan, review, fix, score or improve cold emails, outbound campaigns, email sequences, follow-ups, subject lines, ICPs, personas or segmentation for outreach, or mentions Instantly, Smartlead, Lemlist, Apollo, Lusha or Hunter in an outreach context, even if they don't say "framework" or "table". Do NOT use for newsletters, transactional emails or lifecycle marketing flows (Klaviyo, Mailchimp).
Automated analysis of the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It only issues instructions, so there is nothing to bound. - Actions present in the files
- None. Instructions only.
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/lbarberis/gtm-skills.git /tmp/gtm-skills git -C /tmp/gtm-skills sparse-checkout set "skills/outbound-framework" mkdir -p ~/.claude/skills/outbound-framework cp -R "/tmp/gtm-skills/skills/outbound-framework/." ~/.claude/skills/outbound-framework/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
Or take the whole library
This repo ships a .claude-plugin manifest, so Claude Code can install all 7 skills at once. Plugin skills are invoked as /<plugin>:<skill>, so they never collide with your own.
/plugin marketplace add lbarberis/gtm-skills /plugin
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from lbarberis/gtm-skills/blob/aba514c75be2102fa8c91074bb978ee36cfa050b/skills/outbound-framework/SKILL.md, which is licensed MIT (repository). 3,729 words, 18 headings.
Outbound framework
This skill turns a brief into cold emails through a fixed chain of tables. Every stage outputs a table before any copy gets written. The tables are the thinking: they force one industry, one title, one pain, one proof set and one free asset per email.
That's what makes an email relevant, and relevance is the only criterion. A cold email gets a positive reply when the reader thinks it was written for their job, in their industry, this quarter. Copy quality matters less than people think. The CTA matters more than anything.
A full worked example (hypothetical company, 10 ICPs, every table filled) lives in references/worked-example.md. Read it when unsure about the expected depth or format.
Table rules (apply to every table you output)
- State rows and columns. Put one line above each table:
Rows: ... Columns: .... The reader should never guess what a row is. - Fill every cell. If a value is unknown, write
MISSING. Never guess a name, a number or a client. EveryMISSINGbecomes a question for the user. - Use PASS / FAIL words in check columns, not symbols. They survive every renderer and copy-paste into sheets.
- Tables first, prose second. Prose is one or two connecting lines between tables, never a paragraph restating a table.
- Don't skip stages the routing table says to run. A skipped table is where irrelevant emails come from.
- Emails go in fenced
textblocks so they paste into Instantly or Smartlead without formatting damage. - No em dashes anywhere, in tables or copy. Use commas, periods or colons.
Stage 0: Route the request
Rows: request types. Columns: which stages to run, and what the final output is.
| Request | Stages to run | Final output |
|---|---|---|
| Full campaign from a brief | 1, 2 (if a list is involved), 3, 4, 5, 6, 7, 8 | ICP matrix, Variant A + B per ICP, sequence, QA table |
| One email for one ICP | 1, 3 (single row), 4, 5, 6, 8 | Variant A + B |
| Subject lines only | 1, 3, 5 | Subject check table with winners marked |
| Follow-ups for an existing opener | 1, 5 (new-thread subjects), 7, 8 | Sequence table + full copy |
| Review or fix an existing email | 8 on their draft, then 5 and 6 to rewrite | Audit table + rewritten email |
| List building or segmentation | 2, 3 | Filter spec table + ICP matrix |
| Weekly stats review | 9 | Decision table + new hooks table |
Stage 1: Brief intake
Rows: the inputs every campaign needs. Columns: the input, what the brief says, status, and why it matters.
| Input | Value from brief | Status | Why it matters |
|---|---|---|---|
| Product in one sentence | Have / MISSING | Feeds the How it works | |
| How it works, 3 to 4 steps | Have / MISSING | The default way to explain the product | |
| Sender name and title | Have / MISSING | Self-intro line | |
| Named customers, by industry | Have / MISSING | Authority and subject name-drops | |
| Exact numbers (volumes, results, ratings, counts) | Have / MISSING | Authority and subject numbers | |
| Backers, certifications, partners | Have / MISSING | Extra authority | |
| Free assets the client can actually deliver | Have / MISSING | The CTA, the most important element | |
| Target industries and titles (if given) | Have / MISSING | Seeds the ICP matrix | |
| Language and register (e.g. Italian Lei) | Have / MISSING | Tone and structure | |
| Size split rules (if any) | Have / MISSING | Only case where a meeting CTA is allowed on touch 1 |
If named customers, exact numbers or deliverable assets are MISSING, ask for them in one message before writing copy. An email without real names and numbers, or without an asset the client can deliver, fails the two elements that drive replies.
Stage 2: Data reality check (Apollo, Lusha, Hunter)
Treat all three as big LinkedIn scrapers with an email guesser bolted on. Their data comes largely from LinkedIn profiles and the public web, plus contributor networks. The who-does-what is there and it's good enough to segment on. The email is a guess: the tool applies the company's naming pattern (first.last@, f.last@, first@) and pings the mail server. On catch-all domains the server accepts everything, so the check proves nothing.
Rows: the fields these tools return. Columns: where the field really comes from, how far to trust it, what to do.
| Field | Real source | Trust | Action |
|---|---|---|---|
| Name, title, company | LinkedIn profiles | High, lags job changes | Segment on it. Check LinkedIn for top accounts before sending |
| Seniority, department | Derived from title text | Medium | Filter on title keywords too |
| Industry | Company's LinkedIn category | Medium, broad buckets | Combine with keywords, spot-check 20 rows |
| Headcount | LinkedIn employee count | Medium | Use ranges |
| Pattern guess + server ping, or public pages | Low until verified | Send only to verified. Catch-alls in small batches | |
| Phone | Contributor networks | Variable | Not used in email outbound |
When building a list, output a filter spec. Rows: filters. Columns: filter, value, why, trust note.
| Filter | Value | Why | Trust note |
|---|
Stage 3: ICP matrix and relevance test
One ICP is one industry plus one title, and it gets one campaign and its own email. Two titles in the same company never share a row, because they don't share a pain. For a full campaign aim for 8 to 12 ICPs unless the brief sets a number: enough to learn fast, few enough to review weekly.
Rows: one ICP each. Columns: the fields that make the email relevant.
| # | Industry | Title | Pain point (internal) | Peer proof names | Weighted How it works step | Free asset | Campaign name |
|---|
Column rules:
- Pain point is something this title owns and gets measured on. It's internal: it shapes the email, it never appears as "you struggle with X".
- Peer proof names come from the same industry as the row. A hotel group wants to see hotel groups.
- Weighted step is the How it works step that answers this row's pain.
- Free asset is what the CTA offers this specific ICP (see Stage 6).
- Campaign name format:
[client]-[industry]-[title]-[hook]-[yyww], e.g.NWAP-3PL-HeadFin-Overbilling-2639.
Then run the relevance test. Rows: one ICP each. Columns: the five layer tests, then the verdict.
| # | Peer names recognizable to this title | Pain owned by this title | Asset answers the pain | Proof from same industry | Vocabulary specific to this industry | Verdict |
|---|
Any FAIL: fix the ICP row before moving on. Don't carry a failing row into copy.
Stage 4: Proof inventory
Generic authority reads as no authority. Every claim carries a recognizable name or an exact figure, ideally both. Prefer non-round numbers where the real figure is non-round: 2,066% reads as true because it is.
Rows: one proof point each. Columns: what it is, where it fits, and whether it can be used.
| Proof point | Type | Fits which ICPs | Exact figure | Source | Status |
|---|
Type is one of: named customer, volume, result, rating, backer, partner. Status is one of: Verified, Needs client confirmation, MISSING.
Banned versus required. Rows: claim types. Columns: the vague version, the required version.
| Claim type | Banned | Required |
|---|---|---|
| Customer base | "trusted by thousands" | "10,000+ Amazon and Shopify sellers" |
| Rating | "top-rated app" | "rated 4.9 on the Xero App Store" |
| Named customers | "used by leading studios" | "[named studio], [named studio] and 4,000+ architects in 135 countries" |
| Volume | "processing significant volumes" | "over €500M a year on [regulator] infrastructure, with [bank] and [bank]" |
| Results | "great results for clients" | "[named brand] moved 2,066% more units off a single feature" |
| Backers | "backed by top investors" | "backed by [named fund]" |
Never invent a name or a number for a real campaign. If an ICP needs proof that doesn't exist, mark it MISSING and ask. If the user explicitly wants a draft anyway, insert a visible slot such as [PROOF: named 3PL customer + monthly invoice volume]. Never a made-up name.
Stage 5: Subject lines
Every subject is an impersonal BuzzFeed-style trade headline about the prospect's peers. Two elements are mandatory on top of the style: a number and a recognizable name. The number makes it concrete. The name makes it relevant, because it's a company the prospect benchmarks against.
Rows: subject patterns. Columns: the pattern and an example.
| Pattern | Example |
|---|---|
| How [Name] and [N] other [peers] [behavior] | How GXO and 37 other 3PLs catch carrier overbilling before it gets paid |
| Why [N] [peers] like [Name] stopped [old behavior] | Why 22 auto parts makers like Brembo stopped matching partial deliveries by hand |
| How [Name] went from [X] to [Y] | How Philips and 6 shared service centers pushed touchless invoices from 38% to 81% |
| Why [Name] does [X] instead of [Y] | Why DHL Supply Chain audits 100% of fuel surcharges instead of a 5% sample |
| [N] things [Name]'s [team] stopped doing [when] | 4 things Kuehne+Nagel's finance team stopped doing at month-end |
| Come [peers] [behavior] (Italian) | Come i concessionari auto spediscono in tutta Italia senza rischio sul pagamento |
For each ICP, write 3 candidates and run the check. Rows: candidate subjects. Columns: the five mandatory checks, then the verdict.
| Candidate | Number | Recognizable peer name | Peer group | No "you" / "your" | No target, sender, product or offer | Verdict |
|---|
Pick one candidate with five PASS. Rules behind the checks:
- The peer name is never the prospect's own employer and never the sender. At send time, if the prospect works at the name-dropped company, swap the name.
- The subject never states the offer or the benefit as a pitch. It reads like industry news, not marketing.
- Name and number in the subject must match the authority line. "GXO and 37 other 3PLs" in the subject means the body adds up to 38.
- Specific beats clever: name the concrete behavior, not "working smarter".
- Only deviate from this style if the user explicitly asks for a different format.
Stage 6: Email build
The four elements, always in this order
Rows: the four elements. Columns: job and rules.
| Element | Job | Rules |
|---|---|---|
| 1. Kairos (opener) | Why this person, why now | "I'm contacting you as you [run/lead X] at {{companyName}}..." or "Reaching out as I saw you're [title] at {{companyName}}...". Always first. No greeting, no congrats, no flattery |
| 2. Authority | Why believe it | "I'm [Sender], [Title] at [Company]." then 1 to 2 sentences of names from their industry and exact numbers |
| 3. How it works | What it is and why it's better | 3 to 4 steps, then one value line with a number, strongest word last |
| 4. CTA | The reply | "Would you mind if I share..." plus a free asset built for this ICP |
Never open with the pitch and never open with authority. In campaigns sent from a company alias with a full signature (e.g. formal Italian Lei), the self-intro can fold into the authority line. The authority itself is never optional.
How it works is the default explanation
In most situations, How it works step by step is the best way to explain a product. A prospect can picture four steps inside their own workflow. They can't picture "AI-powered automation". A mechanism they can follow reads as true, a claim reads as marketing.
- 3 to 4 steps, one action each, under 12 words, in their vocabulary (rate card, goods receipt, cost center, site sign-off).
- Describe their workflow with the product, not the product's features.
- Put the weight on the step from the ICP matrix that answers this ICP's pain.
- Close with one value line carrying a number.
- In Variant A, compress to one inline flow: "you set a CPC budget, publishers pitch you story ideas, you approve, they publish, you pay only for the clicks".
The CTA decides the campaign
Syntax: "Would you mind if I share..." / "Would you mind if I sent you..." / Italian: "Le dispiace se le mando...". A yes must unlock a mini action that creates real value for this prospect. The closer to their own material, the better.
Rows: asset types, strongest first. Columns: what the prospect gets, when it fits.
| Asset | What they get | When it fits |
|---|---|---|
| Audit of their data | Their real data run through the product, with the result | Highest intent. Needs them to share a sample |
| Sample from their material | Output built from what's public: their site, their project | Zero effort for them, strongest first impression |
| Benchmark | How their peer group performs, in numbers | Senior titles who manage by KPI |
| Template or case | The document peers use, ready to adapt | Ops roles and follow-ups |
- Never on touch 1: a call, a calendar link, "15 minutes", a free trial of an expensive service, a physical sample.
- Banned on any touch: "Worth a quick chat?", "Worth a call to discuss?", "Got 20 mins this week?", "Open to a call?", and any "[value summary] + worth a call?" construction.
- Sanctioned exception: when the user defines a size split, the over-threshold segment may get a meeting CTA paired with a free trial account. Only when the user sets it up.
Build table, then render
For each ICP, fill the build table first. Rows: the parts of the email. Columns: the content, and the rule check.
| Part | Content | Rule check |
|---|---|---|
| Kairos opener | PASS / FAIL | |
| Self-intro + authority | PASS / FAIL | |
| How it works steps | PASS / FAIL | |
| Value line | PASS / FAIL | |
| CTA | PASS / FAIL | |
| Sign-off | Best, [Sender] | PASS / FAIL |
Then render two variants:
- Variant A, super short: 5 to 10 rows, under 80 words, inline How it works.
- Variant B, mid size: 10 to 20 rows, 100 to 150 words, numbered How it works.
Variant B skeleton:
Subject: [Stage 5 winner]
Hi {{firstName}},
I'm contacting you as you [run/lead X] at {{companyName}}, [one clause of context from their world].
I'm [Sender], [Title] at [Company]. [Named peers from their industry] and [N others] [do X at exact volume] with us.
How it works:
1. [Step in their vocabulary]
2. [Step, weighted for this ICP's pain]
3. [Step]
4. [Step]
[Value line with an exact number, strongest word last].
Would you mind if I [share the free asset built for this ICP]?
Best,
[Sender]
Tone rules
- Decisive, professional, friendly. A human operator, not a marketing bot.
- Sentences under 20 words. Contractions. Lead with the point.
- Max two merge tags:
{{firstName}},{{companyName}}. Heavy templating reads fake. - No greetings or congrats ("Hope you're well", "Congrats on the raise").
- Never lecture the prospect about their industry or describe their problem to them.
- Banned words: synergy, leverage, unlock, game-changer, revolutionary, delve, streamline, empower.
- No em dashes or double dashes. Sign off "Best,".
- If a voice-profile skill for the sender is available, apply it. If
ai-tellsis available, run a light pass.
Stage 7: Follow-up sequence
The opener is followed by 5 follow-ups. They alternate: same subject as a reply in the thread, then a new subject in a new thread, then the same subject again. Same-subject touches keep the offer alive. New-subject touches are a second first impression for someone who ignored the first: new subject, new named proof, new asset.
Rows: the 6 touches. Columns: send day, subject, thread, job, length, CTA.
| Touch | Day | Subject | Thread | Job | Length | CTA |
|---|---|---|---|---|---|---|
| Opener | 1 | A | New thread A | Full email: Kairos, authority, How it works, CTA | 100 to 150 words | Asset 1 |
| FU1 | 3 | Re: A | Reply in A | Bump with one new detail on asset 1 | Under 50 | Asset 1 |
| FU2 | 7 | B | New thread B | New angle, new named proof, short How it works | 60 to 100 | Asset 2 |
| FU3 | 10 | Re: B | Reply in B | One number from asset 2 | Under 40 | Asset 2 |
| FU4 | 15 | C | New thread C | Listicle or case. First touch where a call may appear, as an alternative | 60 to 100 | Asset 3 or a 15-minute walkthrough on their data |
| FU5 | 21 | Re: C | Reply in C | Close the loop, ask for the right person, keep asset 1 open | Under 50 | Referral + asset 1 |
- Subjects B and C pass the full Stage 5 check: number, peer name, peer group, no "you", no target, sender or pitch.
- Never "just checking in", "bumping this" or "did you see my email". Every bump adds one new fact.
- A call never appears before touch 3, and always as an alternative to the asset, never instead of it.
- Stop on any reply. Out-of-office with a return date: pause and resume after it.
Output the sequence table filled for the ICP, then the full copy of all 6 touches in text blocks.
Stage 8: Pre-send QA
Run on every email, every variant, every follow-up. Rows: the checks. Columns: result, and the fix if it failed. Deliver only emails where every row is PASS.
| Check | Result | Fix if FAIL |
|---|---|---|
| Opener says why this person: what they do or run | ||
| 2+ recognizable names from their industry in the authority line | ||
| At least 1 exact figure, non-round where the real one is | ||
| How it works in 3 to 4 steps, in their vocabulary | ||
| One value line with a number | ||
| CTA is "Would you mind if I..." + a free asset built for this ICP | ||
| No call, calendar link or "15 minutes" on touch 1 | ||
| Subject has a number and a recognizable peer name | ||
| Subject never names the target, the sender or the offer, never says "you" | ||
| Subject name and number match the authority line | ||
| Max 2 merge tags | ||
| No em dashes, no buzzwords, no greeting or congrats | ||
| Under 80 words (A) or 150 words (B) | ||
| Every name and number is Verified in the Stage 4 inventory |
When reviewing someone else's draft, run this table on their draft first, then rewrite through Stages 5 and 6.
Stage 9: Weekly review
Every campaign is an experiment. Measure on delivered emails, never opens: Apple Mail Privacy Protection preloads images, so open rates don't mean much.
Rows: one campaign each. Columns: the ICP, the metrics, and the decision.
| Campaign | Industry | Title | Subject hook | CTA asset | Delivered | Bounce | Reply | Positive | Signal | Action |
|---|
Decision rules. Rows: signals. Columns: starting threshold (calibrate after 4 weeks of real data), usual meaning, action.
| Signal | Starting threshold | Usually means | Action |
|---|---|---|---|
| Bounces | Above 2% | Guessed emails, catch-all domains | Pause. Re-verify, drop or batch catch-alls |
| Few replies of any kind | Under 1.5% after 300 delivered | Subject or opener not landing | New subject with a different peer name and number. Keep the body |
| Replies, few positive | Under 1% positive after 300 delivered | Relevance holds, offer is weak | Change the CTA asset. Move it closer to their data |
| "Not me" replies | More than a third of replies | Wrong title for this pain | Move the title filter one level up or down |
| "Send more info" replies | Recurring | Asset too vague | Make the asset personal: their data, their site |
| Strong positives | Above 3% positive | ICP and hook both work | Clone the hook to the adjacent industry, same title |
Change one variable at a time, otherwise nothing is learned. Close every review with a new hooks table. Rows: ICPs getting a new hook. Columns: new peer name, new number, new asset, what it replaces.
| ICP | New peer name | New number | New asset | Replaces |
|---|
Output order for a full campaign
- Stage 1 intake table (and questions, if anything is
MISSING) - Stage 3 ICP matrix, then the relevance test
- Stage 4 proof inventory
- Per ICP: Stage 5 subject check, Stage 6 build table, Variant A and Variant B
- Stage 7 sequence table and full copy (for each ICP, or for the first ICP as the pattern when the user asks for a sample)
- Stage 8 QA table
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- cold-outbound-optimizer by ericosiu · 3,608
- linkedin-outbound-angle by Othmane-Khadri · 317
- outbound-analyst by Othmane-Khadri · 317
- outbound-campaign-architect by Othmane-Khadri · 317
- outbound-prospecting by louisblythe · 170
- ab-testing-framework by thatrebeccarae · 162
- outbound-email-strategy by manojbajaj95 · 104
- clay-gtm-outbound by realjaymes · 64
Need help setting it up?
This page tells you what outbound-framework does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.