Sales Playbooks: an SDR agent that never sends without your yes
- skills
- sales
- sdr
- cold-email

Most outbound fails before the copy matters. The agent blasts a generic list, sends without asking, and never follows a reply to a meeting. Sales Playbooks is the skill that fixes the discipline first and the copy second. It turns an agent into an SDR that prospects for a reason, writes short human email, handles replies, qualifies, books, and keeps a pipeline you can read. Nothing leaves without your yes.
Install it
myclawbots skill add sales-playbooks
That installs the skill from the MyClawBots skills directory into your agent. The skill ships with nine playbooks and two scripts: gate.py, a deterministic pre-send check, and pipeline.py, a local SQLite pipeline store for companies, contacts, signals, the outbox, conversations, and suppressions.
The end-to-end workflow
The loop is always the same, in this order:
Prospect → Qualify → Outreach → Engage → Book → Learn → repeat
Each pass through the loop has fixed priorities. Replies come first, because hot leads cool fast. Then anything you already approved gets sent. Then sequences get written for qualified contacts that have none. Prospecting happens only when the queue of qualified contacts runs low. An idle pass that reports nothing is a correct pass. Never prospect just to look busy.
Here is each stage, with the prompt you can simply type to your agent.
1. Prospect by signal, not by list size
A prospect enters the pipeline for a reason: a signal. The strongest is a relevant open role, because it means the company is buying in your category this quarter. Others include a recent funding round, a gap on their own site (no booking widget, no schema markup, a stale blog), ads running, or a footer credit naming an incumbent agency.
Type this:
Using the sales-playbooks skill, find 20 companies in [industry] with a hiring signal for [role]. For each one, record the company, the decision maker, and the signal with its evidence URL. Do not write any outreach yet.
The skill finds companies without paid tools: web search, the company's own team and careers pages, LinkedIn through Linkedroid, and public registries. A careers page with a relevant open role is the strongest signal. A site's footer, page source, sitemap, and robots file each reveal more signals. Daily quotas are deliberately small: research 20 to 30 companies, identify 10 to 15 prospects, verify 10 to 15 addresses. Segments of 50 or fewer reply far better than blasts of 1,000.
Behind the prompt, the pipeline records each finding as a row, not a guess:
pipeline.py add-company --name "Acme" --domain acme.com --industry "SaaS" --size "11-50"
pipeline.py add-contact --company acme.com --first Sarah --last Lee --title "VP Marketing" --email s@acme.com --email-status verified
pipeline.py observe --company acme.com --contact s@acme.com --signal HIRING_ROLE --text "Head of Growth" --url https://acme.com/careers --confidence 0.9
Email status is recorded honestly: verified if the address is found on the company's site, risky for a catch-all domain, guess for a pattern only. The pre-send gate refuses guess addresses for sequences.
2. Qualify before anyone gets an email
Every contact gets an ICP score from 1 to 10 before outreach. Title match is worth up to 3, company fit up to 3, engagement signal up to 2, reachability up to 2.
pipeline.py score --contact s@acme.com --points 8 --note "exact title, verified email"
The score decides what happens next: 8 to 10 gets a personalised sequence now, 5 to 7 goes into a batch campaign, 3 to 4 only if the pipeline needs volume, 1 to 2 is skipped. BANT screens alongside it: budget signals (size, funding, hiring, ads), authority (owner, founder, C-suite, VP, Director, Head), need (validated from their site, tech, and job posts), and timeline (active evaluation, a vendor change, a deadline). A "not now" is logged with a date and left alone until then. A blank field beats a guessed one.
Type this:
Using the sales-playbooks skill, score every contact in the pipeline and tell me which ones score 8 or higher. Only write sequences for those.
3. Write the 3-email sequence
Email 1 is an observation, not a pitch. One line specific to them, one line connecting it to a gap, one question they would actually want to answer. Under 75 words. The product is ideally not named at all.
Subject: {{company}} website
{{first_name}}, looked at {{company}}'s site. You are clearly doing good work but the site probably is not converting the way it should given how strong your reviews are.
Curious how you are currently getting leads beyond word of mouth?
Email 2 takes a completely different angle. It never references email 1 and never says "following up". New subject, one specific pain, one real number if you have one, one line on how you solve that exact thing, one direct question. Under 60 words.
Email 3 is the breakup. Under 40 words, respectful, no pitch, no summary, no guilt trip:
Subject: closing the loop
{{first_name}}, sounds like the timing is not right. Totally get it.
If this ever becomes a priority, I am around.
If your config allows a fourth touch, it is a one-line bump two to three weeks later: "Still worth a look, or should I close the file?" At most 6 touches over 14 to 28 days, then stop.
The signal picks the first line, and exactly one signal is used as the hook. Hiring beats funding, funding beats a tech gap, a tech gap beats a tech that is merely present, and all of them beat an industry problem. Stacking two signals reads like a dossier. Bank the rest for email 2. If the only signal is "they exist and match the ICP", you have no signal: fall back to a role or industry problem stated honestly.
Type this:
Using the sales-playbooks skill, write a 3-email sequence for [contact] at [company] using the signal [signal]. Email 1 under 75 words, no product name, one question. Email 2 a different angle. Email 3 a breakup under 40 words. Show me all three before anything is sent.
4. The gate and the outbox: nothing sends without your yes
This is the part that makes the skill safe to run. Every outgoing email or LinkedIn message is shown to you, one at a time, and sent only after your explicit yes for that message. Then the gate runs on the exact text going out:
python3 scripts/gate.py --to <email> --subject <s> --body-file <f> --status verified --kind sequence
Exit 0 means send. Anything else means fix the email, show it again, and approve again. Never bypass the gate. The queue lives in the outbox:
pipeline.py queue --contact s@acme.com --step 1 --subject "acme website" --body-file sales/drafts/acme-1.txt
pipeline.py outbox
pipeline.py approve <id>
pipeline.py sent <id> --message-id ...
Sending respects quiet hours and a daily cap from your config, stops when bounces pass the threshold, and follows the channel rules: C-suite and founders get ultra-short email first, VP and Director get email plus LinkedIn but never on the same day, managers and ICs often respond better on LinkedIn first. Never the same channel twice in a row. A reply on any channel moves the whole conversation to that channel.
Type this:
Show me the outbox. I will approve one message at a time.
5. Handle replies by intent
When a reply lands, the agent classifies it before writing a word, records it, and then acts:
pipeline.py reply --contact s@acme.com --intent interested --text "..."
Interested means answer what they asked, then move toward a meeting in one or two messages. A question gets a clear answer tied to their situation plus one next step. An objection gets an acknowledgment, one proof point, and one question. Wrong person means a warm thank you and an ask for a name or an intro. Not interested means no reply at all, stage set to closed lost, and never circle back. Opt-out means suppress immediately and permanently:
pipeline.py suppress <email> --reason opt_out
Angry or legal language means the agent never replies itself: it suppresses and hands the thread to you with the facts. Out-of-office means noting the return date and pushing the next touch past it. Replies stay under 80 words, answer first, and propose two or three specific times with the timezone, or your booking link. The goal of every thread is a booked meeting in two to three exchanges.
Type this:
A reply came in from [contact]: [paste the reply]. Using the sales-playbooks skill, classify the intent, record it, and draft a reply under 80 words. Do not send it until I approve.
6. Book, then learn
Offers come only after genuine interest: a positive reply, a question about the product, a stated pain, or a question about pricing or next steps. Email 1 starts a conversation and never leads with an offer. The offer ladder runs from curious (answer plus a soft next step) to interested (a relevant resource plus a short call) to ready (the specific offer and a clear next step) to urgent (the offer now, plainly). When a meeting is booked, it goes on your calendar with the prospect's context, and the contact moves to closing:
pipeline.py stage --contact s@acme.com --to closing
Then the loop learns. The skill's own targets are a 5 to 15 percent cold reply rate, 2 to 5 percent positive replies, and 1 to 3 meetings per 100 emails. pipeline.py stats reports activity and performance; the learnings about which first lines, angles, segments, and times worked go into memory for the next pass.
Type this:
Give me today's pipeline stats and what changed since yesterday.
Three use cases that fit this skill
A solo founder doing founder-led sales can run the whole loop alone: twenty companies researched, ten prospects scored, one personalised sequence each, every send approved by hand. A small team with a hiring-signal list can work one segment of under fifty companies, where relevance beats volume. And a team already using LinkedIn can run email plus LinkedIn together through Linkedroid, inside its limits, with no browser automation and no fake profiles.
What it will not do
It will not invent customers, numbers, case studies, scarcity, referrals, or prior conversations. Every claim traces to your product knowledge file or the prospect's own public pages. It will not send to a guessed email address, will not re-contact someone who declined, and will not keep a prospect in limbo: at every pass, each prospect moves forward or stops being touched. You are legally responsible for every message, so the skill makes the compliant path the easiest one. Before the first interested reply needs it, your config has to hold your persona, product, offer, ICP, channels, caps, and quiet hours, because an offer can only say what you have actually set.
Start with one segment, one signal, and ten prospects. Install the skill, type the prospecting prompt, and approve the first sequence yourself. That first approved send is the whole workflow in miniature.