ooligo
claude-skill

Score an AI SDR pilot against pre-registered kill criteria and produce a keep/kill memo

Difficulty
advanced
Setup time
2-4 hours
For
revops · sdr-leader · gtm-engineer
RevOps

Stack

A Claude Skill that turns a finished AI SDR pilot into a keep, kill, or extend memo, scored against criteria the team wrote down before the first send. It computes four axes — fully-loaded cost per qualified meeting, meetings per positive reply, human rework hours, and sending-reputation delta — and refuses to return a verdict when the criteria were amended mid-pilot or the sample is too small to carry one. The bundle at apps/web/public/artifacts/ai-sdr-pilot-scorecard-skill/ ships SKILL.md plus four reference files: the pre-registration template the team fills in before the pilot starts, the five-line cost model, the metric definitions, and two literal sample memos.

The problem it solves is not measurement. It is that almost nobody writes the kill line down first. A pilot ends, the vendor’s dashboard shows meetings booked, somebody divides the license fee by that number, and the result clears a threshold nobody registered in advance. Three months later the contract auto-renews because no one produced a document that said what failure would have looked like.

When to use

Run it 14 days after the last pilot send, with the full export. The 14-day tail is deliberate: meetings booked in the final week have not held yet, and complaint-driven filtering degrades on a lag, so a pilot scored on its end date is scored before its own consequences arrive.

Two other modes. A mid-pilot checkpoint with checkpoint: true computes the axes and returns no_verdict — that run exists to catch a reputation breach at week three, not to decide anything. And a renewal review on an already-running deployment treats the trailing 90 days as the window; it is the one mode where a pre-registration written after the fact is acceptable, and the memo carries retrospective: true on its face forever after.

The skill fits 11x, Artisan, aisdr, and homegrown agents equally, because it scores your systems rather than the vendor’s. Everything it reads comes from your CRM, your finance export, your timesheets, and Google Postmaster Tools.

When NOT to use

No pre-registration exists. The skill returns no_preregistration and stops. Writing the criteria now and backdating them produces a worse artifact than no memo — it launders a post-hoc judgment into something that looks like a measurement. The renewal-review mode above is the only exception, and it labels itself.

Below the registered minimum sample. Returns insufficient_sample with observed and required counts. With n qualified meetings, adding or removing one moves cost per meeting by roughly 1/n — 12.5% at eight meetings, 5% at twenty. A six-week pilot that produced nine held meetings cannot distinguish a 4% reply-to-meeting rate from a 7% one, and a verdict computed on it is noise with a decimal point.

Choosing between two vendors. This scores one deployment against a threshold, not two against each other. A head-to-head needs both running on comparable segments with a shared exclusion list, which is a different design.

A human SDR team’s quarterly review. The cost model assumes a per-lead or per-contact meter and a rework line that does not exist in the same shape for headcount.

Setup

Two to four hours, most of it deciding thresholds rather than wiring anything.

  1. Fill in the pre-registration before the first send. Copy references/1-preregistration-template.md, replace every placeholder, commit it. Set min_held_meetings so that one meeting moving in or out changes cost per meeting by less than the margin between your threshold and your expected value — if you expect to land near 700 against a ceiling of 750, that margin is about 7% and twenty meetings is the floor.
  2. Set max_cost_per_qualified_meeting against your current motion, not the vendor’s list price. Published prices only give you the subscription line. AiSDR publishes 250 per month for 200 AI-researched contacts, 900 for 800, and 2,500 for 2,500, with the two larger tiers on quarterly commitment. 11x publishes 3,750 per month billed annually for Growth — 45,000 for the year — covering 2,000 new prospects per month and up to five end users, and states it charges per lead rather than per send. Artisan publishes no price and scopes its tiers at roughly 2,500 and roughly 6,000 leads contacted per month.
  3. Set max_spam_rate to 0.0030 and leave it there. That is Google’s published requirement for senders of more than 5,000 messages per day to Gmail accounts: keep the spam rate reported in Postmaster Tools under 0.30%. Google separately recommends staying under 0.10% so an ordinary complaint spike does not reach the hard line. On a Gmail-heavy list set the working threshold at 0.0010 and treat 0.0030 as the stop.
  4. Set the exclusion rules now. exclude_open_opp_at_booking and exclude_prior_human_touch_within_days: 90 are the two that decide what counts as the agent’s meeting. Loosen them here, in writing, before you know which way it cuts.
  5. Instrument rework hours from day one. A weekly self-reported number from the two people doing the work is imprecise and honest. A number reconstructed at the end by the person advocating for the tool is precise and useless.
  6. Install the skill. Drop SKILL.md and references/ into .claude/skills/ai-sdr-pilot-scorecard/, or upload it as a Skill in claude.ai. Assemble the input payload from your CRM export, finance, timesheets, and Postmaster.

Why the four axes are built this way

Cost per qualified meeting is emitted twice. Once on all five cost lines — subscription, data and enrichment, sending infrastructure, amortized implementation, and rework hours priced at a loaded rate — and once on subscription alone. Both go on the memo. The subscription-only figure is the number in the vendor’s business case; it is not wrong, it is answering a different question, and printing them side by side makes the basis visible rather than arguable. In the worked example in references/2-cost-model.md, a 42-day pilot with 14 qualified meetings comes to 851 per meeting loaded and 370 on subscription alone, and 6,035 of the 6,735 that separates them is a single line: 71 hours of human rework. That distinction changes the next step. “Too expensive” is a negotiation; “six hours of human work per meeting produced” is a product problem a discount does not fix.

Reply-to-meeting counts positive replies only. A negative reply, an out-of-office, and an unsubscribe request are not conversion opportunities, and pooling them into one denominator is how a reply-rate chart stays flat while the list burns. Where the vendor’s own classifier labeled the replies, references/3-metric-definitions.md applies a 0.80 discount and marks the figure unaudited — a convention that file sets so runs stay comparable, not a measured industry number. Supply a 50-reply human-labeled stratified sample and the skill computes the real precision instead.

Rework is scored on trend as well as level. Falling week over week means the team is learning the tool; flat or rising means the tool is not converging. Same level, opposite verdicts.

Reputation is a hard stop, evaluated independently of the economics. If the tail window crosses the absolute line, the verdict is kill no matter what cost per meeting says. Sender reputation is shared across everything the company sends from those domains — invoices, renewals, support replies — so a pilot cannot spend it and book the saving as a result.

Failure modes and guards

  • The kill line moves mid-pilot. This is the most common way a failing pilot survives, and it is rarely dishonest — it is a threshold quietly softened in a doc by someone who has already started to believe. Guard: step 1 hashes the pre-registration and refuses to score against an amended one, returning a field-level diff instead of a verdict. Amending is allowed; re-register with a new hash and the memo carries retrospective: true permanently.
  • Attribution inflation. Vendors count meetings on accounts already in cycle or recently human-touched. Guard: excluded meetings leave the numerator by rule rather than by negotiated discount, and the excluded count and reason distribution are reported as a finding. A vendor whose attributed meetings are 32% already-open accounts is telling you something about its sourcing that no discount addresses.
  • The subscription-only denominator. Guard: the run is rejected with incomplete_cost_model if any of the five lines is null. A line you believe is zero must be entered as 0, which is a claim rather than a gap.
  • Damage landing after the scoring date. Guard: the 14-day tail window is mandatory and the reputation axis can kill a pilot that cleared every cost threshold.
  • keep read as “scale”. The skill scores one configuration at one volume, and volume is the input most likely to break the reputation axis. Guard: the memo’s final section names the scored volume and makes re-scoring a condition of any increase.

Against the alternatives

The vendor’s QBR deck reports the numerator. It has no access to your rework hours, no incentive to apply your exclusion rules, and it labels its own positive replies. Read it, then run this.

A RevOps analyst’s spreadsheet gets the arithmetic right and still loses to criteria drift, because the sheet is built after the results are visible and the thresholds get chosen alongside them. The hash is the only part of this workflow that a spreadsheet structurally cannot replicate.

Letting the contract auto-renew is the actual default, and it is the one this exists to displace. On an 11x Growth commitment that default costs 45,000 for a year nobody decided to buy.

Pair it with ai-sdr-draft-qa-skill, which gates output quality during the pilot, and email-deliverability-monitor-n8n, which watches the reputation axis continuously instead of at two checkpoints. For the vendor-selection question that precedes all of this, see ai-sdr-stack and signal-driven vs autonomous AI SDR.

Files in this artifact

Download all (.zip)