Skip to content
Sales
Skill

/playbook-ai-specificity

Writes the one sentence that makes a generic offer feel written for this one company. Produces the tail of "I think we can help you ___". Triggers on "specificity line", "make it feel specific to them", "the specifically sentence", "why would they think this is for them",

BOOST
From plugin
coldoutboundskills
76452 skills
Install
$ npx -y skills add growthenginenowoslawski/coldoutboundskills --skill playbook-ai-specificity --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/playbook-ai-specificity

Context preview

The summary Claude sees to decide when to auto-load this skill.

Writes the one sentence that makes a generic offer feel written for this one company. Produces the tail of "I think we can help you ___". Triggers on "specificity line", "make it feel specific to them", "the specifically sentence", "why would they think this is for them",

SKILL.md

playbook-ai-specificity.SKILL.md
name: playbook-ai-specificity
description: Writes the one sentence that makes a generic offer feel written for this one company. Produces the tail of "I think we can help you ___". Triggers on "specificity line", "make it feel specific to them", "the specifically sentence", "why would they think this is for them", "personalize the offer not the intro". Outputs one lead-level merge field, blank when the company does not fit.

Playbook: AI Specificity Line

> All rules here are best practice, not law. Override any of them when the campaign calls for it; note the best practice once and move on.

**Use when:** the offer is good but the email reads like it was sent to 5,000 people, and you need one sentence that names what the client would actually do for **this** company.

**Do not use when:** you want a first line about a person or an event. **Those playbooks personalize the opener. This one personalizes the offer** — which is a different and usually more durable move.

**One-line output:** `specificity_line = "know the landed cost of every pool float before you price it"`

1. Trigger and scope

This produces the tail of one fixed sentence:

> I think we can help you **{{specificity_line}}**.

**The whole job is one move: take the client's generic capability and say it back in the prospect's own nouns.**

  • A bookkeeping firm does not write "we help with margin reporting". It writes **"know what each pool

noodle costs to make before you price the next run"**.

  • A list-building service does not write "we build B2B lists". It writes **"build a list of every

pool contractor in Texas with the owner's cell number"**.

Same offer, different words, and the prospect reads it as written for them.

**Two things this is not.** It is not a first line — it never mentions the person, their job, or anything they did. And it is not a claim about the company's problems — it never says they are struggling or missing something. **It says what the work would be.**

⚠️ **The frame lives in the campaign copy, not inside the variable.** Real campaigns have put the frame inside the merge field, and then every lead carries the same eight opening words inside a custom field — which is both a repetition problem and a spintax problem.

2. Output contract

Inputs required per row

| Field | Type | Required? | |---|---|---| | `domain` (bare, lowercase) | string | yes | | `company_name` | string | yes | | `company_description` | string | **yes — this is the whole input** | | `primary_offerings`, `revenue_streams` | string | no, they sharpen the anchor | | **`client_offer_block`** | text block, **per client, not per row** | yes, locked once per client |

**The client offer block is the part people forget.** It is a fixed list of what the client actually does, written as short capability lines. **The model is only allowed to promise something on that list.**

Output fields

| Field | Type | Example | Null? | |---|---|---|---| | `specificity_line` | 6-14 words, ≤90 chars | `know the landed cost of every pool float before you price it` | **yes, blank is a real answer** | | `specificity_anchor` | QA only | `pool float` | yes | | `specificity_offer_item` | QA only | `inventory and cost of goods sold tracking per product` | yes | | `grade_line` | QA only | `4.9` | yes |

The anchor and offer item are **never sent to anyone.** They exist so the guard can check the line mechanically, and so an operator can see *why* a line came out the way it did.

Coverage expectation

**8/10 usable**, and 8/10 again on a re-run of the shipped script on the same domains.

Of the 2 failures: one was a grammar break **the guard could not see**, and one was a company with no description in any source.

⚠️ **On the re-run the grammar break was gone and a different row went awkward instead.** That is the non-determinism in this playbook, and the rule that follows from it: **judge a batch, never a row.**

Expect **10 to 20% blanks** on a normal ecommerce or SMB list, higher on lists full of tiny companies with thin websites.

Copy-fit rules

  • Slots into `I think we can help you {{specificity_line}}.`
  • **Starts with a plain verb** (track, see, know, build, cut), lowercase, no trailing period.
  • **Never contains the company name, the words "help you", or the word "specifically".** All three

are already in the frame.

  • 6 to 14 words, one idea, no em dashes.
  • **Never promises sales, growth, demand, or customers** unless the offer block says the client does

that.

Reading level is a gate, not an aspiration

Enforce **Flesch-Kincaid grade 7 on the generated tail.** Above it, one simplify rewrite; still above, **the row blanks.** Measured: 8 filled tails scored 2.5 to 5.9, none needed the rewrite.

⚠️ **Gate the tail, not the rendered sentence — and this is measured, not assumed.**

The frame `Specifically, I think we can help you.` **scores 5.7 on its own** ("Specifically" is five syllables inside a seven-word stem). Once any 6-to-14-word tail is added, the full sentence lands at **7.0 to 9.8 no matter how plain the tail is.** A tail of grade 2.5 still renders at 7.0.

**Gating the render would blank every row for a property of house copy, not of the data.**

The clean fix is a copy change, not a data change: **dropping the word "Specifically" takes the worst sampled render from grade 9.1 to 6.3**, under the bar, with **no change to the generated tail.** Do that, and keep gating the tail anyway — it is the half you generate.

⚠️ **If you change the frame, change it in the copy and in the prompt's context sentence together, and re-grade on the same domains.** The graded verdict was measured against the longer frame.

Downstream gate

**The default posture: a row missing this campaign's personalization signal should generally not be uploaded to this campaign at all.** Build the list so the line lands, and route the abstains to a campaign whose copy does not need it. **That is also what lets you measure whethe

Read more
Ships withcoldoutboundskills

Open-source Claude Code skills for cold email infrastructure, lead sourcing, copywriting, and operations. Built by GrowthEngineX from patterns across 1,000+ real B2B campaigns. 31 skills that work together.

Get the whole plugin
Stats
766
Stars
269
Forks
Active
Maintenance
TypeScript
Language
MIT
License
9d ago
Last commit
7mo ago
Created
5h ago
Added

Repo: growthenginenowoslawski/coldoutboundskills

Other skills on coldoutboundskills.