Writes the one sentence that makes a generic offer feel written for this one company.

MITAuto-check passed

Install Playbook AI Specificity

skills CLI
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-ai-specificity -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install growthenginenowoslawski/coldoutboundskills playbook-ai-specificity --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/playbooks/playbook-ai-specificity .claude/skills/playbook-ai-specificity && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
playbook-ai-specificity
GitHub stars
753
Token cost
~4.1k tokens
SKILL.md length
1,790 words
Files
3
Skills in repo
49
Repo updated
First seen
Licence
MIT

At a glance

Writes the one sentence that makes a generic offer feel written for this one company.

  • Works in 7 steps: Trigger and scope → Output contract → Source chain (cost-tagged) → …
  • Specificity line
  • SKILL.md covers 1. Trigger and scope, 2. Output contract, 3. Source chain (cost-tagged) and 4. Verification, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Playbook AI Specificity is an agent skill from growthenginenowoslawski/coldoutboundskills. 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.

Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `clay-table.md` and `clay-workflow.md`).

The repository describes itself as: Open-source Claude Code skills for cold email and outbound sales. Grade campaigns, export Prospeo searches, scrape Google Maps — all from Claude Code. The licence is MIT.

When your agent uses it

  • Specificity line
  • Make it feel specific to them
  • The specifically sentence
  • Why would they think this is for them

Example prompts

  • “I think we can help you”
  • “specificity line”
  • “make it feel specific to them”
  • “/playbook-ai-specificity”

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Trigger and scope
  2. Output contract
  3. Source chain (cost-tagged)
  4. Verification
  5. Clay implementation
  6. Locked prompt
  7. Edge cases and failure modes

What it can do on your machine

Read from SKILL.md and the folder at commit 25c5d85. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Playbook AI Specificity loads about 4.1k tokens when it runs. Until then it costs about 102 tokens; SKILL.md has 1,790 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~102
When it runs · the whole SKILL.md, loaded when a task matches
~4.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from growthenginenowoslawski/coldoutboundskills at commit 25c5d85, republished under its MIT licence (© growthenginenowoslawski). 1,790 words, ~4,072 tokens.

Download SKILL.mdSave it as .claude/skills/playbook-ai-specificity/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
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
FieldTypeRequired?
domain (bare, lowercase)stringyes
company_namestringyes
company_descriptionstringyes — this is the whole input
primary_offerings, revenue_streamsstringno, they sharpen the anchor
client_offer_blocktext block, per client, not per rowyes, 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
FieldTypeExampleNull?
specificity_line6-14 words, ≤90 charsknow the landed cost of every pool float before you price ityes, blank is a real answer
specificity_anchorQA onlypool floatyes
specificity_offer_itemQA onlyinventory and cost of goods sold tracking per productyes
grade_lineQA only4.9yes

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 whether the line earns its keep.

Where a genuinely optional clause abstains on a small share of rows, pre-render the whole sentence — frame plus value plus trailing period and space — into one field, so the body carries a single merge field that renders as nothing when empty.

⛔ Spintax is banned as the blank-handling mechanism. It picks a variant at random and cannot branch on whether a variable is empty.

A blank is also a soft targeting signal: if more than 30% of a segment comes back blank, the list is wrong for this campaign, not the prompt.

Show full SKILL.md (792 more words)Show less

3. Source chain (cost-tagged)

The signal is not fetched, it is written. The chain is only about getting one honest paragraph describing what the company sells.

#SourceCostResult
1An internal company database's derived descriptionFREE9/10 domains present, and rich enough to write from in 8 of those 9
2Plain homepage fetch, browser UA, meta description + first 1,500 charsFREE1/4 on ecommerce domains. Measured: one returned 0 bytes, one 16 bytes, one 1 byte, one refused the connection
3Rendering proxyMETERED, cappedverified: 7,805 characters of clean text in 8.3s after the plain fetch returned 0. Only when step 2 came back under ~400 characters and the run's explicit row cap has budget

Step 2's numbers are worth internalizing: modern ecommerce sites frequently return nothing to a plain fetch. If your evidence source is "just fetch the homepage", you will silently write from nothing on exactly the list types this playbook is best at.

4. Verification

VERDICT: PASS 8/10, twice, on the same domains.

5. Clay implementation

  • clay-table.md — the column build with the deterministic guard.
  • clay-workflow.md — the CLI-buildable version.

6. Locked prompt

In your own scripts: a nano-class model at minimal reasoning effort. Measured ~1,848 input and 59 output tokens per row. Params: max_completion_tokens=400, no temperature, flex tier for batch.

Inside Clay: gpt-4o-mini. ⚠️ A Clay column set to a reasoning model with the reasoning level unset is the 19x-more-expensive, returns-blanks configuration — measured at 1,088 to 2,000 reasoning tokens per row and 2 of 5 rows returning empty.

The prompt has three parts. Part 1 is byte-identical for every client and must stay first. Part 2 is the client offer block, locked once per client. Part 3 is few-shot examples, which are client-specific and must be rebuilt for every client.

Part 1 — static prefix (never edited per client)
text
You write one short merge field that gets dropped into the middle of a cold email sentence.

The sentence it goes into is exactly this, and you are writing only the {{VAR}} part:
"Specifically, I think we can help you {{VAR}}."

STEP 1, FIT CHECK. Read the company data. Decide if the client offer below really applies
to how THIS company makes money. Say yes for any company that makes or sells a product, or
sells a service, that the offer list can plainly serve. Say no for schools, city and
government bodies, hospitals, churches, charities, and any company whose business you
cannot tell from the data. Write "yes" or "no" in "fits". If no, return empty strings for
the rest and stop.

STEP 2, ANCHOR. Pick one anchor: a word or short phrase for the thing this company makes,
sells, or counts. Copy it from the company data word for word. It must be a real thing,
like "pool float", "washable rug", "hard cooler", "pool contractor". It cannot be a
business word like "product", "margin", "channel", "SKU", "revenue", or "customer".

STEP 3, OFFER ITEM. Pick the ONE line from the client offer list below that fits this
company best, using evidence in the company data, not the first item on the list. Copy it
word for word into "offer_item". You may not write anything the offer list does not say.

STEP 4, LINE. Write the merge field. It must contain the anchor, and it must say what the
offer item does, in plain words, for this company's anchor. Do not copy the offer item
wording into the line. Say it the way this company would say it.

Rules:
1. Write at a 5th-grade reading level. Use short, common words.
2. Start with a plain verb, like "track", "see", "know", "build", "cut". Lowercase first
   word. No comma at the start. No period at the end. Never write the words "help you"
   or "specifically".
3. Never write the company's name. The email already says it.
4. Never use an em dash or an en dash. Use a comma, or "and", "so", or "because".
5. Never state a fact that is not in the company data. Do not guess what they probably do.
6. Between 6 and 14 words. One idea only.
7. Never promise sales, growth, demand, traffic, or customers unless the offer list says
   the client does that. You describe the work, not the result of their business.
8. Never write the words "channel", "platform", or "across". If the company data names a
   real place they sell, like dealers, gift shops, Amazon, or their own site, name that
   place instead. If it names none, leave the place out of the line.
9. Banned phrases, because they fit any company: "product margins", "gross margin",
   "your business", "your products", "boost margins", "improve efficiency", "grow faster",
   "grow sales", "more sales", "drive demand", "increase sales". If your line needs one of
   these, your anchor was too vague. Go back to step 2.
10. If step 1 said no, or you cannot find a real anchor in the data, return empty strings.
   Never write "N/A", "unknown", "none", or a placeholder in brackets.
11. Empty is only for "fits": "no", or data too vague to name a real thing. If "fits" is
   "yes" you must write an anchor and a line. Low confidence is fine, write it anyway.
   Marketing fluff in the data is normal. One real product word is enough to work with.

Return JSON only, no markdown fence:
{"fits": "yes|no", "anchor": "<words copied from the company data, or empty>", "offer_item": "<one line copied from the offer list, or empty>", "line": "<merge field, or empty>", "confidence": "high|low"}

Rule 9 is the one that does the most work. "If your line needs one of these, your anchor was too vague. Go back to step 2." A banned-phrase list alone just moves the fluff around; telling the model why it reached for the phrase sends it back to the real fix.

Part 2 — the client offer block (fill once per client, then lock)
text
CLIENT OFFER (the company sending this email):
Name: {one line, what kind of company they are, never the brand name}
Sells to: {who they serve and roughly what size}
What they actually do:
- {capability 1, concrete, the words a customer would use}
- {capability 2}
- {capability 3}
- {capability 4}
- {capability 5}
What they do NOT do: {the four or five nearby things people assume, listed plainly}

Rules for this block, learned the hard way:

  • Five to seven capability lines, each a thing a customer would recognize, not a category.
  • The "do NOT do" line is load-bearing. Without it the model borrows adjacent promises.
  • The capability lines are copied verbatim into offer_item, so they double as the guard's whitelist. Write them as short, quotable phrases.

Worked example:

text
CLIENT OFFER (the company sending this email):
Name: a US outsourced bookkeeping and fractional CFO firm
Sells to: consumer product and ecommerce brands doing $2M to $50M a year
What they actually do:
- monthly close and clean books in QuickBooks or Xero
- inventory and cost of goods sold tracking per product (per SKU landed cost)
- margin reporting by product, by channel, and by sales platform
- cash flow forecasting ahead of inventory buys
- sales tax filing across states
- getting books ready for a lender, a bank line, or an investor
What they do NOT do: raise money, run ads, build software, fix supply chain, hire staff
Part 3 — few-shot examples (client-specific, faux prior turns, 8 to 10 pairs)

Alternating user and assistant messages, never a bulleted list inside the system prompt.

Include at least two abstains: one obvious non-fit (a school district, a city department) and one company whose description is pure fluff with no product word. Without abstain examples the model learns that every row deserves a line.

7. Edge cases and failure modes

SymptomCauseFix
Every lead's email opens with the same eight words in a custom fieldThe frame was put inside the variableThe frame lives in the copy. Only the tail is generated
Lines are generic ("improve efficiency", "your products")The anchor was a business word, not a real thingRule 9 sends the model back to step 2. The banned list alone is not enough
The line promises growth the client cannot deliverThe offer block is missing its "do NOT do" lineAdd it. The model borrows adjacent promises without it
The line copies the offer list wordingStep 4 was skippedThe line must say the offer in this company's nouns
Every row blanks on a reading-level gateYou gated the rendered sentence, not the tail. The frame alone scores 5.7Gate the tail. Consider shortening the frame
The homepage fetch returns nothing on ecommerce sitesMeasured: 0 bytes, 16 bytes, 1 byte, connection refused on four real brandsThe rendering proxy, capped — or accept the abstain
Two runs give different lines for the same rowReal non-determinism, measuredJudge a batch, never a row
Over 30% blanks in a segmentThe list is wrong for this campaign, not the promptRe-target, or route those rows elsewhere
The Clay column costs 19x the estimateA reasoning model with the level unsetUse a mini-class model in Clay
Specifically, I think we can help you .An empty variable inside a fixed frameRoute abstains out, or pre-render the whole sentence into one field
Hard rules
  • The model may only promise something on the client offer list.
  • The frame never lives inside the variable.
  • Gate the tail's reading level, not the rendered sentence's.
  • Judge a batch, never a row.
  • Spintax is never the blank-handling mechanism.

© growthenginenowoslawski, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files in skills/playbooks/playbook-ai-specificity of growthenginenowoslawski/coldoutboundskills.

  • SKILL.md
  • clay-table.md
  • clay-workflow.md

Open the folder on GitHubat commit 25c5d85

Compare with similar skills

Playbook AI Specificity next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Playbook AI Specificity compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Playbook AI Specificity this skillgrowthenginenowoslawski/coldoutboundskills753—~4.1kAutomated safety check: PassMIT
Offerssickn33/agentic-awesome-skills47k1 repos~2.4kAutomated safety check: PassMIT
Agent Specificationruvnet/ruflo74k2 repos~1.8kAutomated safety check: PassMIT
Offer Appointmentsickn33/agentic-awesome-skills47k1 repos~3.9kAutomated safety check: PassMIT
Generic Assistantmastra-ai/mastra29k—~1.1kAutomated safety check: PassCustom licence
Specificity Managementthedaviddias/Front-End-Checklist74k—~477Automated safety check: PassMIT

Similar skills

  • Offers

    sickn33/agentic-awesome-skills

    When the user wants to design, construct, or improve an offer — the thing they actually sell — including value framing, bonus stacking, guarantee design, scarcity/urgency, naming, and payment…

    47k GitHub starsUsed in 1 repo~2.4k tokens
    Auto-check passed
  • Agent skill for specification - invoke with $agent-specification

    74k GitHub starsUsed in 2 repos~1.8k tokens
    Product & Project ManagementAuto-check passed
  • Offer Appointment

    sickn33/agentic-awesome-skills

    Offer register: candidate, position, department, employment type, offered salary and currency, offer date and expiry, joining date, probation, approver and sign-off.

    47k GitHub starsUsed in 1 repo~3.9k tokens
    Auto-check passed
  • Generic Assistant

    mastra-ai/mastra

    Fallback authoring playbook for building general-purpose personal assistant agents that do not fit a more specific archetype.

    29k GitHub stars~1.1k tokensUpdated today
    Sales & SupportAuto-check passed
  • Specificity Management

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Keep CSS specificity low and flat.

    74k GitHub stars~477 tokensUpdated 5 days ago
    Frontend & DesignAuto-check passed
  • Apply concrete design-engineering details that make interfaces feel polished.

    277k GitHub starsUsed in 1 repo~1.2k tokens
    Frontend & DesignAuto-check passed

More from growthenginenowoslawski/coldoutboundskills

All 49 skills in this repo
  • Email Deliverability Audit

    growthenginenowoslawski/coldoutboundskills

    Diagnostic audit for a running cold email program. An agent skill from growthenginenowoslawski/coldoutboundskills.

    753 GitHub stars~3.4k tokensUpdated 5 days ago
    Auto-check passed
  • Icp Onboarding

    growthenginenowoslawski/coldoutboundskills

    Conversational intake for cold email campaigns. An agent skill from growthenginenowoslawski/coldoutboundskills.

    753 GitHub stars~1.9k tokensUpdated 5 days ago
    Auto-check passed
  • List Builder

    growthenginenowoslawski/coldoutboundskills

    META skill — build the largest possible qualified lead list for any request, end to end.

    753 GitHub stars~4.7k tokensUpdated 5 days ago
    Auto-check: notes
  • Auto Research Public

    growthenginenowoslawski/coldoutboundskills

    Autonomous cold email campaign launcher. An agent skill from growthenginenowoslawski/coldoutboundskills.

    753 GitHub stars~2.9k tokensUpdated 5 days ago
    Auto-check passed
  • Blitz List Builder

    growthenginenowoslawski/coldoutboundskills

    Use the Blitz API to find decision-makers at specific companies when you already have a list of company domains.

    753 GitHub stars~2k tokensUpdated 5 days ago
    Auto-check passed
  • Deliverability Test Public

    growthenginenowoslawski/coldoutboundskills

    Compare reply rates, bounce rates, and positive reply rates broken down by inbox type (SMTP / Gmail / Outlook) for a Smartlead account.

    753 GitHub stars~1k tokensUpdated 5 days ago
    Auto-check passed

Questions about Playbook AI Specificity

What does Playbook AI Specificity do?

Writes the one sentence that makes a generic offer feel written for this one company. Playbook AI Specificity is an agent skill from growthenginenowoslawski/coldoutboundskills. Writes the one sentence that makes a generic offer feel written for this one company.

When should I use Playbook AI Specificity?

Playbook AI Specificity fits situations like: specificity line; make it feel specific to them; the specifically sentence; why would they think this is for them.

How do I install Playbook AI Specificity in Claude Code?

Run `npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-ai-specificity -a claude-code`. Or copy the skill folder (skills/playbooks/playbook-ai-specificity in growthenginenowoslawski/coldoutboundskills) into .claude/skills/playbook-ai-specificity in your project. Claude Code loads it when a task matches its description.

How do I install Playbook AI Specificity in Codex?

Run `npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-ai-specificity -a codex`. Or copy the skill folder (skills/playbooks/playbook-ai-specificity in growthenginenowoslawski/coldoutboundskills) into .agents/skills/playbook-ai-specificity in your project. Codex loads it when a task matches its description.

Can I use Playbook AI Specificity in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add growthenginenowoslawski/coldoutboundskills --skill playbook-ai-specificity -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/playbook-ai-specificity, .gemini/skills/playbook-ai-specificity, .github/skills/playbook-ai-specificity and .opencode/skills/playbook-ai-specificity in your project.

What does Playbook AI Specificity need to run?

SKILL.md names no scripts, command-line tools or credentials: Playbook AI Specificity is instructions for the agent only.

Does Playbook AI Specificity access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Playbook AI Specificity safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Playbook AI Specificity use?

Playbook AI Specificity is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Playbook AI Specificity use?

About 4.1k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Playbook AI Specificity?

Skills that share tags, products or a category with Playbook AI Specificity: Offers (sickn33/agentic-awesome-skills, 47k stars), Agent Specification (ruvnet/ruflo, 74k stars), Offer Appointment (sickn33/agentic-awesome-skills, 47k stars) and Generic Assistant (mastra-ai/mastra, 29k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Playbook AI Specificity?

growthenginenowoslawski (a GitHub user) maintains it in growthenginenowoslawski/coldoutboundskills, which has 753 GitHub stars. The repository holds 49 skills in this directory. The repository was last updated on October 5, 2026.

Source: growthenginenowoslawski/coldoutboundskills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.