ericrisco/rsc-harness/sales-pipeline

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Use when an operator runs deals out of a spreadsheet or Notion and wants real stages, win probabilities, deal hygiene, a weekly follow-up sweep, and a defensible roll-up forecast — including the case where the pipeline looks full but nothing closes. NOT statistical or scenario forecast modelling (that is `forecasting`), NOT sourcing prospects (that is `lead-gen`), NOT writing the outbound emails (that is `cold-outreach`), NOT the proposal or quote (that is `proposals`), NOT the post-close kickoff (that is `client-onboarding`).

Install

npx vskill@latest install ericrisco/rsc-harness/sales-pipeline

SKILL.md

Sales Pipeline — A Disciplined CRM Out of a Flat File

You run a small team's pipeline from a CSV, a markdown table, or a Notion DB — no Salesforce, no RevOps. Your one rule: the forecast is what the gated stages and current win rates say, not what the rep hopes. Happy-ears deals do not inflate the number on your watch.

This skill does four jobs and refuses to drift into the siblings that own the rest: (1) define a small set of gated stages with objective exit criteria, (2) keep every open deal hygienic (next step + close date + last-touch, flag the stale), (3) run a weekly follow-up sweep, and (4) roll a defensible weighted forecast with a coverage ratio. The heavy statistical modeling, the lead sourcing, the outbound copy, the proposal, the post-close handoff — each belongs to a sibling. Route, do not improvise their job.

When to use / when NOT

Use when the operator already has a list of deals and wants stages, probabilities, hygiene, a weekly sweep, coverage vs quota, or pipeline velocity — or when they describe the symptom "pipeline looks full but nothing closes."

Do NOT use when the ask is one of these — route to the owner:

The askOwnerWhy it is not here
3-scenario revenue model, seasonality, cohort/time-series projectionforecastingThat is the statistical/scenario layer. This skill only does the simple stage-weighted roll-up that falls out of the pipeline.
Find / scrape / qualify NEW prospect companies to addlead-genThis skill operates on deals that already exist in the list.
Write the cold email or follow-up sequence to contact a prospectcold-outreachThis skill schedules the next step; it does not write the words.
Write the proposal / quote / SOW for a qualified dealproposalsA stage transition is not a document.
Post-close kickoff, account setup, onboardingclient-onboardingThe moment a deal is Closed-Won it leaves this skill.
Generic dashboard / charting of arbitrary metrics, KPI tree designdashboard / kpi-frameworkThis skill emits pipeline numbers, not a charting layer.

The boundary worth memorizing: `forecasting` owns the math models; sales-pipeline owns the operational CRM. When the request needs Monte Carlo, regression, or scenario trees, hand it over.

The artifact first — the deal-record schema

Everything below lints against one table. Define it before anything else, because hygiene, the sweep, and the forecast are all just operations on these columns. One deal = one row. Required columns:

columnmeaningrule
idstable deal idunique, never reused
companythe account—
valuedeal value (one currency, document which)number, no symbols
stagecurrent stagefrom the allowed set (next section)
win_probstage win-probability as a decimal0–1, owned by the stage, not the rep
weighted_valuevalue × win_probmust equal the product (lint enforces it)
close_dateexpected close (ISO YYYY-MM-DD)required on every open deal
next_stepthe next concrete action + its daterequired on every open deal
last_touchdate of last real activity (ISO)required on every open deal
ownerwho owns the deal—
forecast_categoryPipeline / Best Case / Commit / Closed / Omitteda category, not a stage

One good open row (CSV):

csv
id,company,value,stage,win_prob,weighted_value,close_date,next_step,last_touch,owner,forecast_category
D-104,Acme,40000,Discovery,0.30,12000,2026-07-15,"2026-06-09 demo with VP Eng",2026-05-30,Dana,Best Case

Hard rule, no exceptions: no open deal may be missing `next_step`, `close_date`, or `last_touch`. A deal with no next step is not a deal, it is a wish. The sweep and the forecast both treat a missing field as a defect, not a blank.

The stage model — small, gated, stage-owned probability

Default to six stages. Five stages with clear exit criteria beat nine stages with none. Each stage advances only on an objective, verifiable buyer action — never on rep optimism.

stagedefault win_probexit criterion (the verifiable buyer action that advances it)
Prospecting0.05Buyer agreed to a first real conversation (meeting on the calendar).
Qualification0.10BANT/MEDDIC documented "yes" — budget, authority, need, timeline confirmed.
Discovery0.30Buyer confirmed the problem + success criteria; you have the buying process and review layers.
Proposal/Demo0.40Proposal or demo delivered and acknowledged; buyer engaged on it.
Negotiation0.65Terms/price under active discussion; verbal intent + a mutual close plan.
Closed1.0 / 0.0Signed (Won) or formally lost (Lost).

Rules that make the table hold:

  • Probability belongs to the stage, not the deal. A rep who hand-sets one deal to 90% in Discovery is sandbagging or happy-ears; both poison the forecast. The stage carries the number, uniformly. (Why: it removes the single biggest source of forecast inflation in small teams.)
  • No stage advances without its exit criterion met AND a calendared next step. "If you don't know the criteria, timeline, review layers and legal steps, the close date is a guess."
  • Negotiation 50–80% is a band, not a default 80. Pick within the band on real signal (legal in motion → higher); never max it out reflexively.

Qualification gate: run BANT as a ~60-second screen for small deals; switch to MEDDIC/SPICED above ~$25K ACV. The full six-stage playbook — every exit criterion, required fields per stage, the BANT-vs-MEDDIC pillars, and the forecast-category mapping — lives in references/stage-playbook.md.

Deal hygiene — the required-field gate and the stale rules

Roughly 40–60% of B2B CRM pipeline is stale (no progression in 30+ days). A forecast built on a stale list is fiction. Apply an activity-decay model on every open deal:

conditionaction
Missing next_step / close_date / last_touchDefect — flag, do not forecast until fixed.
No touch for 14+ daysHalve the deal's effective weight in the forecast.
No touch for 30+ daysExclude from coverage entirely (treat as stale, not pipeline).
Sitting > 1.5× the average time-in-stageFlag for review — it is stuck.
close_date already in the past, deal still openFlag — the date is a lie; re-set or disqualify.

Bad → Good on a single row:

text
BAD (open, but a wish dressed as a deal — fails the gate):
D-220,Globex,60000,Proposal,0.80,48000,,,,Sam,Commit
^ win_prob hand-set to 0.80 in Proposal, no close_date, no next_step,
no last_touch, Commit category on zero evidence.
GOOD (gated, hygienic, stage-owned probability):
D-220,Globex,60000,Proposal,0.40,24000,2026-08-01,"2026-06-12 send revised SOW",2026-06-02,Sam,Best Case
^ win_prob = stage default, weighted_value recomputed, dated next step,
fresh last_touch, category demoted to match the evidence.

The weekly follow-up sweep

Build hygiene into a ~45-minute WEEKLY pipeline review, not a quarterly cleanup — stale deals compound fast and a quarterly purge always finds the rot too late. The sweep is a fixed checklist; run it and emit a prioritized follow-up list:

  • [ ] Every open deal has next_step + close_date + last_touch — list the defects first.
  • [ ] Stale: no touch 14+ days (halve) and 30+ days (drop) — surface both buckets.
  • [ ] close_date in the past on an open deal — re-set or disqualify.
  • [ ] Slipped: close_date pushed two weeks in a row — flag; two slips is a pattern, not noise.
  • [ ] Stuck: time-in-stage > 1.5× the average for that stage.
  • [ ] Output: a ranked follow-up list (highest weighted_value × most stale first), each with the one concrete next action and its date.

Track coverage as a 4-week rolling trend, not a single snapshot. Two consecutive weeks of declining coverage with no closes is a red flag — escalate, do not wait for quarter-end.

The forecast roll-up

Three numbers fall out of a clean pipeline. Compute them; do not model beyond them (that is forecasting).

Weighted forecast = Σ over open deals of value × stage win_prob. Apply the stale decay first (halve at 14d, drop at 30d) so the number reflects live pipeline, not the wish list.

Pipeline coverage ratio = Total Qualified Pipeline Value ÷ Revenue Target. Read it against the segment, because win rates differ:

segmentACV / win ratecoverage mincoverage target
Enterprise$100K+ / 15–20% win5×6–7×
Commercial$25–100K / 20–30%3.5×4–5×
SMB<$25K / 30–40%2.5×3–4×

Pipeline velocity = (Open opps × Avg deal size × Win rate) ÷ Sales-cycle length (days) → dollars/day. Cycle length has the most leverage: a ~20% cut in cycle length lifts velocity ~25%.

Forecast categories are not stages — map them separately: Pipeline / Best Case / Commit / Closed / Omitted. As a sanity expectation, roughly ~25% of "Pipeline", a third-to-half of "Best Case", and near-all of "Commit" typically lands in-quarter.

The current-win-rate caveat — non-negotiable. 2025 benchmarks moved against sellers: B2B win rates fell ~21% → ~18% and cycles lengthened ~12% YoY. Forecast with the current ~18% win rate and your real cycle length, never last year's optimistic numbers. A 24-month-old win rate is the quietest way to over-forecast.

Worked examples — weighted forecast on a 5-deal list, coverage by segment, velocity, and the exact column contract verify.sh enforces — are in references/forecasting-math.md.

Anti-patterns

Anti-patternWhy it failsDo instead
Rep hand-sets win_prob per dealHappy-ears/sandbagging inflate the forecast; the number stops being comparableProbability is owned by the stage, applied uniformly
Stages with no exit criteria"Discovery" becomes a place deals go to die; no one can verify progressionEvery stage gates on an objective buyer action
Counting stale deals (30+ days no touch) in coverage40–60% of pipeline is stale; coverage looks healthy while nothing movesDrop 30d+ from coverage, halve 14d+, flag stuck deals
Forecasting off list price, not weighted valueTreats a Qualification deal like a signed one; massive over-forecastvalue × stage win_prob, decayed for staleness
Quarterly cleanup instead of weeklyRot is found three months too late; the quarter is already lost45-min weekly sweep; 4-week rolling coverage trend
Using a 24-month-old win rate2025 win rates fell to ~18%, cycles +12%; old numbers over-forecastUse the current win rate and your real cycle length
forecast_category set to "Commit" on a Discovery dealCategory drifts from evidence; the commit number becomes a fantasyCategory must match documented evidence, not hope
Nine micro-stages "for granularity"More stages, less discipline; reps can't tell them apartSix gated stages beat nine ungated ones
Open deal with no next_stepIt is a wish, not a deal; it silently ages into stalenessNo next step → it is a defect, surface it in the sweep

References and siblings

  • references/stage-playbook.md — the six stages in full, exit criteria, required fields per stage, BANT-vs-MEDDIC, forecast-category mapping.
  • references/forecasting-math.md — worked weighted-forecast / coverage / velocity examples and the verify column contract.

Siblings that own the adjacent jobs — route to them by name: ../forecasting/SKILL.md (the math models), ../lead-gen/SKILL.md (sourcing), ../cold-outreach/SKILL.md (the outbound copy), ../proposals/SKILL.md (the quote/SOW), ../client-onboarding/SKILL.md (post-close). For wiring the list to Sheets/Notion or bulk edits, ../spreadsheet-ops/SKILL.md.

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
141
Repository forks
11
7-day trend score
30

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/ericrisco/rsc-harness/sales-pipeline/badge)](https://verified-skill.com/skills/ericrisco/rsc-harness/sales-pipeline)

Something wrong with this skill or its page? Tell us.