Ein Claude Skill, der einen Vertriebsvergütungsplan entwirft — Kennzahl, Pay Mix, Quota, Beschleunigerkurve, SPIFs, Clawback-Trigger, Streitbeilegungsregelung — und ihn anschließend bepreist, indem er die tatsächliche Zielerreichungsverteilung des Vorjahres durch die neue Kurve laufen lässt. Er berichtet, was der Plan bei drei Leistungsniveaus des Unternehmens kostet, was der Median-Rep tatsächlich gegenüber dem OTE verdient, mit dem er rekrutiert wurde, und welche Clawback-Bedingungen der Entwurf verletzt. Er endet mit draft oder blocked. Ein Urteil, das „genehmigt“ bedeutet, existiert nicht.
Das Bundle liegt unter apps/web/public/artifacts/comp-plan-drafter-skill/ und enthält SKILL.md sowie drei Referenzvorlagen: references/1-plan-inputs-template.md (Rolle, Segment, OTE, Quota, Kurve, Bundesstaaten der Reps, Budget), references/2-attainment-history-template.md (eine Zeile pro Rep-Jahr, ausgeschiedene Reps eingeschlossen) und references/3-sample-output-format.md (das exakte Markdown, das der Skill ausgibt, mit einem durchgerechneten Beispiel).
Wann Sie ihn einsetzen
Sechs bis zehn Wochen vor Beginn des Planjahres, bei einem Plan, dessen einziges Kostenmodell eine Tabelle ist, die unterstellt, dass alle bei 100% der Quota landen. Diese Unterstellung ist der Grund, warum es das hier gibt. Die AE-Studie 2026 der Bridge Group über 158 B2B-Unternehmen verortet 48% der Reps auf Quota, Enterprise-AEs bei 38%, und das mediane Verhältnis von Quota zu OTE ist auf 4,6x gestiegen. Ein auf Vollerreichung kalkulierter Plan ist weder konservativ noch aggressiv: Er ist gegen eine Population bepreist, die es nicht gibt, und der Fehler zeigt sich entweder als Budgetüberschreitung oder — weit häufiger — als ein Team, das still und leise deutlich unter dem OTE seines Angebotsschreibens verdient.
Ebenfalls sinnvoll: eine unterjährige Änderung für ein Segment, eine neue Rolle ohne Planvorgänger, und eine Nachbetrachtung des aktuell laufenden Plans, wenn die variable Vergütung weit neben dem Forecast lag und niemand sagen kann, ob die Kurve oder die Quota die Ursache war.
Der Teil, der sich rechnet, ist Schritt 3. Jedes Vergütungstool kann eine Kurve zeichnen; fast keines lässt Ihre eigene Historie auf Rep-Ebene durch die Kurve laufen, die Sie gleich ausrollen. Diese Rückrechnung macht aus „die Beschleuniger sehen vernünftig aus“ ein „das kostet bei der Vorjahresleistung 2,41 Mio. und 2,98 Mio., wenn das Team zehn Punkte besser wird“.
Wann Sie ihn NICHT einsetzen
Einen Plan genehmigen oder in Kraft setzen. Ein Vergütungsplan ist ein Vertrag. In Kalifornien verlangt Labor Code § 2751 Schriftform, Unterzeichnung durch den Arbeitgeber und eine unterschriebene Empfangsbestätigung des Mitarbeiters; außerdem muss die Methode der Provisionsberechnung einschließlich der Chargeback-Regelung darin stehen. Jeder draft, den der Skill ausgibt, trägt requires_counsel_review: true im Kopf, und kein Pfad entfernt das.
Provisionen berechnen oder auszahlen. Das hier entwirft und bepreist den Plan. Auszahlungsberechnung, Streitfallbearbeitung und Payroll gehören in eine ICM-Plattform. Der Skill schreibt in nichts hinein.
Die Quota einer einzelnen Person festlegen. Er modelliert eine Quota für Rolle und Segment. Einer namentlich genannten Person eine Zahl zuzuweisen, ist eine Frage von Abdeckung und Kapazität: Machen Sie zuerst den Gebietszuschnitt und bepreisen Sie den Plan dann dagegen.
Gehaltsbänder im Recruiting. Base und Equity für eine Rolle gegen Radford- oder Pave-Daten zu benchmarken, ist eine andere Aufgabe mit anderen Quellen und einem anderen Freigeber.
Bücher mit weniger als einem Dutzend voll eingearbeiteter Rep-Jahre. Dreizehn Zeilen sind eine Verteilung, über die man streiten kann. Sechs sind eine Anekdote mit einer Perzentilfunktion darüber, und der Skill gibt blocked zurück statt einer Kostenzahl, die er nicht belegen kann.
Setup
Füllen Sie die Plan-Inputs. Setzen Sie in references/1-plan-inputs-template.md Rolle, Segment, Headcount, Ziel-OTE, Pay Mix, vorgeschlagene Quota und budget_ceiling. Lassen Sie jedes Kurvenfeld auf propose, dann entwirft der Skill dieses Stück; fixieren Sie die bereits entschiedenen. Setzen Sie market_ote_reference aus einer Erhebung, die Sie tatsächlich besitzen, und benennen Sie sie in market_ote_source — die Retentionswarnung im Output ist genau so gut wie diese Zahl.
Exportieren Sie die Zielerreichungshistorie samt Abgängen. In references/2-attainment-history-template.md eine Zeile pro Rep-Jahr des Vorjahres: anteilige Quota, Zielerreichung gegen diese anteilige Quota, eingearbeitete Monate, Austrittsdatum. include_terminated: true ist Pflicht, und der Skill gibt blocked zurück, wenn es auf false steht.
Entscheiden Sie den Cap bewusst. Die Vorlage liefert ohne Cap aus. Ein Cap schützt das Budget gegen einen einzelnen übergroßen Deal und erzeugt zuverlässig genau das Sandbagging, gegen das er geschrieben wurde. Sehen Sie sich den High-Case der Kostentabelle an, bevor Sie wählen, statt den Default der Vorlage zu erben.
Führen Sie zuerst dry_run: true aus. Das liefert die beobachtete Verteilung, die Zahl der voll eingearbeiteten Rep-Jahre und jede ausgeschlossene Zeile mit Begründung. Die meisten Historien-Exporte enthalten zwei oder drei Zeilen mit Quota null oder 400% Zielerreichung aus einem einzigen Deal, und Sie wollen die sehen, bevor sie in einer Kostenzahl stecken.
Installieren und Rechte begrenzen. Legen Sie das Bundle nach ~/.claude/skills/comp-plan-drafter/ und setzen Sie SFDC_TOKEN mit Lesezugriff auf Opportunity, User und Quota, falls Sie die Historie aus Salesforce ziehen statt aus einer CSV. Nur-Lesen ist der richtige Scope, keine Vorsichtsmaßnahme.
Was der Skill tatsächlich tut
Zwei Durchläufe, und die Trennung ist Absicht. Durchlauf eins entwirft den Plan — das ist die Urteilsarbeit und gehört dem Modell. Durchlauf zwei rechnet den Entwurf gegen die beobachtete Verteilung zurück, und diese Arithmetik läuft in Code. Eine stückweise definierte Auszahlungsfunktion auf vierzig Rep-Zeilen reproduziert sich nicht von Lauf zu Lauf, wenn ein Modell sie im Kontext rechnet, und ein Vergütungsgespräch bricht in dem Moment zusammen, in dem zwei Läufe desselben Entwurfs zwei Plankosten liefern.
Der Kostenbericht liefert drei Zahlen statt einer: die beobachtete Verteilung, plus und minus das Sensitivitätsband. Ein Vergütungsplan ist ein gehebeltes Instrument, und die nützliche Größe ist die Steigung. Ein Plan, dessen Kosten sich über zwanzig Punkte Zielerreichung um 8% bewegen, steuert niemanden; einer, der sich um 60% bewegt, ist ein Budgetrisiko, das jemand bewusst akzeptieren sollte.
Verdienste werden nach Dezil berichtet, nie als Durchschnitt. Im durchgerechneten Beispiel in references/3-sample-output-format.md landet der Plan 21% unter einem genehmigten Budget, während der Median-Rep 154.900 gegenüber einem OTE von 200.000 verdient — eine Kombination, die eine rein budgetorientierte Prüfung kommentarlos durchwinkt. Der Skill verweigert außerdem die bequeme Lösung: Bei 61% medianer Zielerreichung zahlt kein vertretbares Quota-zu-OTE-Verhältnis dem Median-Rep sein Ziel, also benennt er die eigentliche Entscheidung (Abdeckung, Gebiet oder Ramp korrigieren — oder es bei der Einstellung offen sagen), statt eine Ratenanpassung vorzuschlagen, die die Lücke nicht schließen kann.
Die Regelprüfung gibt eine Checkliste aus, keine Schlussfolgerung. Drei Bedingungen entscheiden, ob ein Clawback in den meisten Bundesstaaten einer Anfechtung standhält: Der Trigger ist im Plandokument definiert, bevor die Provision gezahlt wird, das Entstehungsereignis ist an etwas tatsächlich Umkehrbares gekoppelt, und die Rückforderung darf den Rep in keiner Abrechnungsperiode unter den geltenden Mindestlohn drücken. Der häufigste Redaktionsfehler ist der zweite — Entstehung beim Booking, Rückforderung bei Churn innerhalb von zwölf Monaten — und der Skill benennt die Diskrepanz, statt ein generisches Bestanden zu melden.
Was es wirklich kostet
Weil die Arithmetik auf Rep-Ebene in Code läuft, skalieren die Token-Kosten mit der Größe der Zusammenfassung und des Plandokuments, nicht mit dem Headcount. Ein Plan über 40 Reps läuft bei Claude Sonnet 5 mit etwa 1 bis 3 USD pro Entwurfs- und Stresstest-Zyklus, bei veröffentlichten API-Preisen von 3 USD pro Million Input-Token und 15 USD pro Million Output-Token. Diese Zahl ist eine Schätzung aus Token-Preis und typischer Dokumentlänge; sie bewegt sich damit, wie viel Narrativ Sie anfordern, nicht mit der Größe des Teams. Ein Designzyklus braucht sechs bis zwölf Läufe, während die Kurve überarbeitet wird — kalkulieren Sie also rund 20 USD für die Saison.
Der Vergleich, auf den es ankommt, sind nicht die Toolkosten, sondern der Kalender. Ein RevOps-Analyst, der dieselben drei Sichten von Hand baut — jedes Rep-Jahr durch eine Kandidatenkurve laufen lassen, das für jede Revision neu machen und die Bundesstaaten-Checkliste zusammenstellen — braucht zwei bis vier Tage pro Iteration, und deshalb modellieren die meisten Teams eine Kurve und verhandeln dann ab da. Jeder Lauf hier sind Minuten plus eine Stunde Lesen des Outputs, und genau das lässt acht Revisionen statt einer in das Zeitfenster passen.
Gegenüber den Alternativen
QuotaPath — veröffentlicht echte Zahlen, was in dieser Kategorie selten ist: Growth mit 800 USD Plattformgebühr im Monat inklusive der ersten fünf Nutzer plus 50 USD pro Nutzer und Monat im Premium-Tier, jährliche Abrechnung, mit Planmodellierung, mehrstufigen Freigaben und API-Zugang (Preisseite des Anbieters, geprüft am 11.08.2026). Eine Organisation mit 40 Reps liegt bei Premium bei rund 30.600 USD im Jahr. Wählen Sie es, wenn der Plan in dem System leben soll, das auch die Auszahlungen berechnet und die Freigaben routet. Es modelliert Szenarien gut; es sagt Ihnen nicht, dass der Median-Rep 77% des OTE verdienen wird.
CaptivateIQ — nichts veröffentlicht, pro Platz auf Payees statt auf Admins gerechnet, wobei Vendr einen medianen Jahresvertrag von 36.120 USD über 305 analysierte Käufe berichtet. Der Compensation Builder Agent ging im Mai 2026 in eine begrenzte Beta und entwirft Formeln aus Ihren bestehenden Plänen — genau das ist der Haken: Ein Team mit vier überlappenden Beschleunigern bekommt Hilfe beim Bau des fünften. Wählen Sie CaptivateIQ, wenn Incentive-Compensation-Management der Scope ist und die Planstruktur bereits feststeht.
Ein Vergütungsberater — der ehrliche Platzhirsch für das Design des Plans und besser als das hier in der politischen Arbeit, einen Plan akzeptiert zu bekommen. Sie liefern einen guten Plan pro Jahr und rechnen ihn in der Regel nicht gegen Ihre Historie auf Rep-Ebene zurück, sofern Sie sie nicht übergeben und die Analyse bezahlen.
Der Vorjahresplan mit geänderten Zahlen — die tatsächliche Baseline in den meisten Unternehmen und der Grund, warum Beschleunigerschemata jahrelang driften, ohne dass jemand diese Drift bepreist. Es kostet nichts, und so landet eine vierte Komponente in einem Plan, den niemand in zwei Sätzen erklären kann.
Worauf Sie achten müssen
Eine Zielerreichungshistorie ohne die ausgeschiedenen Reps. Fluktuation ist in Bezug auf Zielerreichung nicht zufällig: Niedrigerreicher gehen, überproportional. Eine Datei nur mit Verbleibenden unterschätzt die Plankosten und überschätzt gleichzeitig die Gesundheit der Verteilung. Guard: include_terminated ist Pflicht, der Skill gibt blocked zurück, wenn es auf false steht, und ausgeschiedene Reps gehen mit anteiliger Quota und Teiljahres-Zielerreichung ein.
Eine Verteilung, die unter einer anderen Quota entstanden ist. Die Zielerreichung des Vorjahres spiegelt die Quota und die Gebiete des Vorjahres. Guard: Der Skill erfasst prior_plan_quota_median und warnt, wenn die entworfene Quota sich um mehr als quota_shift_tolerance_pct bewegt; das Kostenmodell wird dann als richtungsweisend gekennzeichnet statt als Forecast ausgegeben.
Ein Plan, der die Budgetprüfung besteht und Leute kostet. Der Kostenbericht ist ein Finanzinstrument und genehmigt bereitwillig einen Plan, von dem der Median-Rep nicht leben kann. Guard: Die Dezil-Tabelle steht direkt neben der Kostentabelle, sodass Retentionskosten und Budgetkosten auf derselben Seite stehen und im selben Meeting gelesen werden.
Ein dauerhafter SPIF. Ein SPIF ohne Enddatum ist kein SPIF, sondern eine undokumentierte Ratenerhöhung, die niemand neu genehmigt. Guard: Die SPIF-Zeile verlangt ein explizites Ablaufdatum in der Input-Datei, und der Skill weigert sich, die Komponente ohne dieses zu entwerfen.
blocked als Urteil über das Design lesen. Es besagt, dass den Zahlen nicht zu trauen ist, nicht dass der Plan falsch ist. Guard: Jede blocked-Rückgabe benennt den konkreten Datenmangel und was ihn beheben würde, sodass die Antwort eine korrigierte Exportdatei ist und kein Redesign.
Stack
Claude — Planentwurf, Kurvendesign, Narrativ zu Regelungslücken; die Rückrechnung läuft in Code, nicht im Kontext
Salesforce — Closed-Won-Historie, Quota-Datensätze und Roster, wenn die Zielerreichungsdatei gezogen statt von Hand exportiert wird
Die Dateien mit Plan-Inputs und Zielerreichungshistorie — die beiden Inputs, die den Output spezifisch für Ihre Organisation machen statt für eine Vorlage
Eine ICM-Plattform — CaptivateIQ, QuotaPath oder was auch immer die Auszahlungen berechnet, sobald der entworfene Plan genehmigt und unterschrieben ist
Design von Vertriebsvergütungsplänen — das Framework hinter den Entscheidungen zu Kennzahl, Kurve und Untergrenze, gegen die dieser Skill entwirft, plus Quota-Abdeckung für die Kapazitätsrechnung, die stimmen muss, bevor der Plan überhaupt etwas bedeutet
---
name: comp-plan-drafter
description: Draft a sales compensation plan — metric, pay mix, quota, accelerator curve, SPIFs, clawback trigger, and dispute policy — from role, segment, and OTE inputs, then stress-test it by replaying last year's actual attainment distribution through the new curve. Reports modeled plan cost, per-decile rep earnings, and policy gaps. Emits `draft` or `blocked`, never an approved plan.
---
# Sales comp plan drafter
## When to invoke
Whenever someone is writing next year's sales compensation plan and the only cost model behind it is a spreadsheet that assumes everyone lands at 100% of quota. The canonical moment is six to ten weeks before the plan year opens, while the curve is still editable and before anything has been shown to reps. Also valid: a mid-year plan amendment for one segment, a new role whose plan has no precedent in the org, and a post-mortem run against the plan currently in market to explain why variable comp came in over or under budget.
Take a plan inputs file (`references/1-plan-inputs-template.md`), an attainment history file (`references/2-attainment-history-template.md`), and produce the Markdown plan document plus stress-test report shown in `references/3-sample-output-format.md`.
Do NOT invoke this skill for:
- **Approving or issuing a plan.** The output is a draft that goes to compensation, finance, and counsel. A sales comp plan is a contract; in California, Labor Code § 2751 requires it in writing, signed by the employer, with a signed acknowledgment of receipt from the employee. There is no verdict in this skill that means "ship it."
- **Calculating or paying commissions.** This drafts and prices the plan. Payout calculation, dispute resolution, and payroll belong to an ICM platform or the finance team, and the skill writes to nothing.
- **Setting individual quotas.** It models a quota level for a role and segment. Assigning a number to a named rep is a territory-and-capacity question — carve first, then price the plan against the carve.
- **Recruiting pay bands.** Benchmarking base and equity for a role against survey data is a different job with different sources.
- **Books with fewer than `min_history_reps` fully-ramped rep-years.** A distribution built from six survivors is not a distribution, and a cost model built on it is a guess wearing a table. The skill returns `blocked`.
## Inputs
- Required: `plan_inputs_path` — role, segment, headcount, target OTE, pay mix, proposed quota, curve shape, plan year, and the states reps work in. See `references/1-plan-inputs-template.md`.
- Required: `attainment_history_path` — one row per rep-year for the trailing plan year, including reps who left mid-year. See `references/2-attainment-history-template.md`.
- Optional: `budget_ceiling` — total variable compensation approved for the plan year, in plan currency. When set, the cost report is expressed against it rather than as a bare number.
- Optional: `sensitivity_band_pct` — default `10`. The company-wide attainment shift, in percentage points, used for the low and high cost cases.
- Optional: `dry_run` — boolean, default `false`. When `true`, the skill validates the history file and returns the observed distribution plus a data-quality report, without drafting a plan. Run this first.
## Reference files
Read both input templates before drafting anything. Without the attainment history the skill has no cost model and must not invent one.
- `references/1-plan-inputs-template.md` — the plan being designed: role, segment, OTE, pay mix, quota, curve, SPIF budget, work states, and the policy constraints that bound the draft.
- `references/2-attainment-history-template.md` — one row per rep-year: attainment percentage, prorated quota, months ramped, and termination date if any. The `include_terminated` flag is load-bearing.
- `references/3-sample-output-format.md` — the exact Markdown the skill emits, with a worked example. Downstream consumers (a finance model, a plan-document template) parse this shape.
## Method
Run in order. Steps 2 and 3 are the load-bearing split; do not merge them.
1. **Load and validate.** Parse both files. Count fully-ramped rep-years in the history. Below `min_history_reps` (default 12), stop and return `blocked` — say how many rows were found and what the floor is. If `include_terminated` is `false`, return `blocked` regardless of row count: a history containing only the reps who stayed is survivorship-biased in the one direction that matters, because low attainers leave, and it makes every plan look cheaper and every distribution look healthier than it is.
2. **Draft the plan.** This is the judgment pass and it belongs to the model. Produce: the metric paid on, the pay mix, the quota, the curve (threshold, target rate, accelerator tiers and where they kick in, decelerator if any), a SPIF budget line with a named expiry date, the clawback trigger, and the dispute-resolution policy with a named response window. Keep the component count at or below `max_components` (default 3) — every component past the third divides rep attention without adding steering, and the modeled dollars usually show one component carrying almost nothing.
3. **Back-cast the draft against the observed distribution — in code.** Replay each historical rep's actual attainment percentage through the *new* curve and sum the modeled payouts. Do this arithmetic in code, not by reading the roster into the reasoning context. A piecewise payout function applied to forty rep-rows will not reproduce run to run when a model does it in context, and a compensation conversation collapses the moment two runs of the same draft produce two plan costs. The model's job is the curve, the ranking, and the narrative.
Report three numbers, not one: modeled cost at the observed distribution, at the distribution shifted up by `sensitivity_band_pct`, and shifted down by the same. A comp plan is a leveraged instrument and the useful figure is the slope. A plan whose cost moves 8% across a 20-point attainment swing is under-leveraged and will not change behavior; one that moves 60% is a budget risk somebody should agree to on purpose.
4. **Report earnings by decile, not by average.** Average earnings hide the plan's actual behavior. Emit modeled total earnings at the 10th, 50th, and 90th percentile of the observed distribution, alongside target OTE. The number that predicts attrition is what the median rep actually earns against the OTE they were recruited on — if that lands well below target, the plan is priced for the budget rather than for the market and the cost report will still pass.
5. **Run the policy check.** For each state in `rep_work_states`, note the local constraint and emit the checklist rather than a conclusion. Three conditions decide whether a clawback survives challenge in most states: the trigger is defined in the plan document before the commission is paid, the earning event is tied to something genuinely reversible, and the recovery mechanism cannot push the rep below the applicable minimum wage in any pay period. Check the draft against all three and name which one fails. Where California is in the list, add the § 2751 items: written agreement, signed by the employer, signed acknowledgment of receipt from the employee, and a stated method for computing commissions including the chargeback policy.
6. **Emit `draft` or `blocked`.** `draft` means the plan is modeled, priced, and ready for human review; every `draft` document carries `requires_counsel_review: true` in its header. `blocked` means a data problem makes the cost numbers untrustworthy — too few rep-years, terminated reps excluded, or a quota shift that invalidates the distribution. There is deliberately no third verdict. The skill makes the cost and the policy gaps visible before people decide; it does not decide.
## Output format
The skill emits Markdown in exactly this shape. Full worked example with populated rows in `references/3-sample-output-format.md`.
```markdown
# Comp plan draft — FY27 Mid-Market AE
plan_year: 2027 | headcount: 34 | history rows: 41 (incl. 9 terminated)
requires_counsel_review: true
## Verdict: draft
Curve lands 21% under budget at the observed distribution and the median rep
earns 77% of OTE — priced for the budget, not the market. Clawback trigger
fails the reversibility test.
## 1. Plan structure
| component | metric | weight | notes |
|---|---|---|---|
| base | — | 50% of OTE | 100,000 |
| commission | closed-won ARR | 45% of OTE | 9.4% of ARR at target |
| SPIF | new-logo multi-year | 5% of OTE | expires 2027-06-30 |
## 2. Curve
| band | attainment | rate | cumulative payout |
|---|---|---|---|
| threshold | 0-50% | 0% | 0 |
| target | 50-100% | 9.375% of ARR | 90,000 at 100% |
| accelerator 1 | 100-130% | 1.5x base rate | 130,500 at 130% |
| accelerator 2 | 130%+ | 2.0x base rate | uncapped |
## 3. Modeled cost (back-cast on 41 rep-years, 34 plan heads)
| case | company attainment | variable cost | vs budget (3,060,000) |
|---|---|---|---|
| low | observed -10 pts | 1,940,000 | -37% |
| observed | 61% median | 2,410,000 | -21% |
| high | observed +10 pts | 2,980,000 | -3% |
## 4. Rep earnings by decile
| percentile | attainment | modeled earnings | vs OTE (200,000) |
|---|---|---|---|
| p10 | 34% | 100,000 | 50% |
| p50 | 61% | 154,900 | 77% |
| p90 | 141% | 250,300 | 125% |
## 5. Policy check
| item | state | status |
|---|---|---|
| written + signed + acknowledged | CA | present in draft |
| computation method stated | CA | present in draft |
| clawback trigger pre-defined | all | present in draft |
| clawback tied to reversible event | all | FAIL — 12-month churn is not the earning event |
| minimum-wage floor per pay period | CA, NY, WA | not modeled — needs draw schedule |
## 6. What to change
- The clawback recovers on churn inside 12 months, but the plan earns
commission on booking. Tie recovery to non-payment or contract
cancellation, or move the earning event to cash collected.
- Median rep earns 154,900 against a 200,000 OTE, and the plan spends
650,000 under budget. The curve is not the cause: at 61% median
attainment, no defensible quota-to-OTE ratio pays the median rep target.
Quota would have to fall to roughly 590,000 — a 3.0x ratio — to put the
median at 100%. Either fix the input (coverage, territory, ramp) or
accept that this plan pays half the team 77% of OTE and say so at hire.
- Cost moves 43% across a 20-point attainment swing. That is real leverage
and it is worth confirming on purpose rather than discovering in Q3.
```
## Watch-outs
- **An attainment history that excludes reps who left.** Low attainers leave, so a survivors-only file understates plan cost and overstates the health of the distribution — in the same direction, at the same time. Guard: `include_terminated` is a required field and the skill returns `blocked` when it is `false`; terminated reps enter with prorated quota and partial-year attainment.
- **A distribution produced under a different quota.** Last year's attainment reflects last year's quota and last year's territories. If the new median quota moves materially, the old distribution stops predicting anything. Guard: the skill records `prior_plan_quota_median` and warns when the drafted quota moves more than `quota_shift_tolerance_pct` (default 15), stating in the report that the cost model is directional only.
- **A plan that passes the budget check and loses people.** The cost report is a finance instrument and it will happily approve a plan the median rep cannot live on. Guard: the decile table sits next to the cost table and reports median modeled earnings as a percentage of target OTE, so the retention cost is on the same page as the budget cost.
- **A clawback that recovers against something the earning event does not cover.** Recovering commission on 12-month churn when the plan earns on booking is the most common drafting error, and it is the condition that fails in dispute. Guard: step 5 tests the trigger against the earning event explicitly and names the mismatch rather than reporting a generic pass.
- **A permanent SPIF.** A SPIF that never expires is not a SPIF, it is an undocumented rate increase that nobody re-approves. Guard: the SPIF line requires an explicit expiry date in the inputs file, and the skill refuses to draft a SPIF component without one.
- **Treating `blocked` as a verdict on the plan.** `blocked` says the numbers cannot be trusted, not that the design is wrong. Guard: every `blocked` return names the specific data defect and what would clear it, so the response is a data fix rather than a redesign.
# Plan inputs
Replace the example values with yours. Everything here describes the plan you want drafted and the constraints it has to live inside. The skill drafts the curve; it does not invent the OTE, the headcount, or the states your reps work in.
## Role and scope
```yaml
plan_year: 2027
plan_start: 2027-01-01
role: "Mid-Market Account Executive"
segment: "mid-market" # smb | mid-market | enterprise | strategic
headcount: 34 # quota-carrying heads in this plan at plan start
currency: USD
plan_status: draft # draft | socialized | in_market
```
`plan_status` changes the tone of the report, not the arithmetic. Once a plan is `socialized`, a recommendation to change the curve carries a communication cost as well as an effort cost, and the report says so in the header rather than leaving the leader to discover it in the meeting.
## Target compensation
```yaml
target_ote: 200000
pay_mix: # must sum to 100
base_pct: 50
variable_pct: 50
market_ote_reference: 200000 # what you believe the market pays this role
market_ote_source: "Bridge Group 2026 AE Metrics, median OTE 200,000"
```
`market_ote_reference` is what the decile table compares against when it flags a plan priced below market. Set it from a survey you actually hold, and name the source — if it is a guess, say so in `market_ote_source`, because the retention flag is only as good as this number.
## Quota
```yaml
proposed_quota: 960000 # annual, per fully-ramped rep
prior_plan_quota_median: 850000 # last year's median assigned quota
quota_shift_tolerance_pct: 15 # warn above this much movement
```
The tolerance exists because the attainment history you supply was produced under `prior_plan_quota_median`. Move the quota far enough and the distribution stops predicting the new plan's cost. The skill will still model it; it will label the output directional.
## Curve
Give the shape you want drafted. Leave any field as `propose` and the skill drafts that piece; pin the ones that are already decided.
```yaml
curve:
threshold_pct: 50 # no commission below this attainment
target_rate: 1.0 # multiplier between threshold and 100%
accelerators:
- from_pct: 100
to_pct: 130
rate: propose
- from_pct: 130
to_pct: null # null = uncapped
rate: propose
decelerator: none # none | {below_pct, rate}
cap: none # none | a dollar figure
```
Uncapped is a real decision, not a default. A cap protects the budget against a single outsized deal and reliably produces the sandbagging it was written to prevent; the cost table's high case is where you should look before choosing.
## Components
Keep this at three or fewer. A fourth component almost always shows up in the modeled-dollars column carrying a rounding error's worth of pay and a meaningful share of rep attention.
```yaml
max_components: 3
components:
- name: commission
metric: closed_won_arr # the thing you want more of
weight_pct: 90 # share of the variable half
- name: new_logo_spif
metric: new_logo_multiyear
weight_pct: 10
expiry: 2027-06-30 # required — a SPIF with no expiry is a rate increase
```
## Earning event and clawback
```yaml
earning_event: booking # booking | invoiced | cash_collected
clawback:
trigger: "customer non-payment within 90 days of invoice"
recovery_method: "offset against future commission, max 25% per pay period"
post_termination: false
```
`earning_event` and `clawback.trigger` have to describe the same thing. Earning on `booking` while recovering on churn is the mismatch the policy check is looking for: the plan is trying to reverse something the earning event never depended on.
## Policy constraints
```yaml
rep_work_states: [CA, NY, TX, WA, IL]
draw:
type: none # none | recoverable | non_recoverable
amount_monthly: 0
dispute_policy:
response_window_days: 15
escalation: "RevOps → VP Sales → CFO"
budget_ceiling: 3060000 # total approved variable comp for the plan year
min_history_reps: 12
sensitivity_band_pct: 10
```
The state list drives the policy checklist. It is not legal advice and the skill does not pretend otherwise — it produces the items counsel needs to see, marked against the draft, so the review is a review rather than a discovery exercise.
# Attainment history
One row per rep-year for the trailing plan year. This file is the cost model. Everything the stress test reports comes from replaying these rows through the drafted curve, so the quality of this file sets the quality of the output.
## The one rule that matters
```yaml
include_terminated: true
```
Include the reps who left. All of them, with their partial-year attainment and their prorated quota.
This is not a completeness preference. Attrition in a sales org is not random with respect to attainment — low attainers leave, and they leave disproportionately. A history containing only the people still on the roster understates what the plan will cost and overstates how healthy the distribution is, in the same direction, at the same time. The skill returns `blocked` when this flag is `false`, because a plan priced on survivors is priced on the wrong population.
## Rows
```csv
rep_id,segment,months_ramped,prorated_quota,attainment_pct,terminated_on,notes
r-001,mid-market,12,850000,141,,
r-002,mid-market,12,850000,118,,
r-003,mid-market,12,850000,104,,
r-004,mid-market,12,850000,97,,
r-005,mid-market,12,850000,88,,
r-006,mid-market,12,850000,74,,
r-007,mid-market,12,850000,61,,
r-008,mid-market,12,850000,58,,
r-009,mid-market,12,850000,44,,
r-010,mid-market,12,850000,31,,
r-011,mid-market,7,495833,38,2026-07-31,involuntary
r-012,mid-market,5,354167,22,2026-05-29,involuntary
r-013,mid-market,9,637500,96,2026-09-30,voluntary — competitor offer
```
| Column | What goes in it |
|---|---|
| `rep_id` | Any stable identifier. Do not use names; the output is circulated. |
| `segment` | Must match a segment in the plan inputs, or the row is excluded and counted in the data-quality report. |
| `months_ramped` | Months at full productivity during the year. A rep in month three of a six-month ramp contributes a partial rep-year and is excluded from the fully-ramped count. |
| `prorated_quota` | The quota actually carried, prorated for partial years. Not the annual number. |
| `attainment_pct` | Attainment against `prorated_quota`, as a whole number. `141` means 141%. |
| `terminated_on` | ISO date, blank if still employed. |
| `notes` | Free text. `voluntary` / `involuntary` is worth recording — it is the only signal in this file about whether the plan drove the exit. |
## What counts toward `min_history_reps`
Only fully-ramped rep-years — rows where `months_ramped` equals 12, or where a terminated rep was fully ramped for the months they worked. Ramping reps are still worth including for the cost model, because they cost money, but they do not make the distribution more trustworthy and the skill does not count them toward the floor.
Below the floor, the correct output is `blocked`. Thirteen rows is a distribution you can argue about; six is an anecdote with a percentile function applied to it.
## Optional: prior-plan curve
Supply the curve these attainments were paid under and the report adds a year-over-year comparison — what the same rep-years would have cost under the old plan against the new one. This is the single most persuasive number in a comp review, and it is unavailable without this block.
```yaml
prior_curve:
threshold_pct: 60
target_rate: 1.0
accelerators:
- from_pct: 100
to_pct: null
rate: 1.4
cap: none
```
## Data-quality report
Run the skill with `dry_run: true` before drafting anything. It returns the observed distribution, the fully-ramped count, and a list of rows it had to exclude with the reason for each. A history file usually has two or three rows with a quota of zero or an attainment above 400% from a single outsized deal, and you want to see those before they are inside a cost number rather than after.
# Sample output
The exact Markdown the skill emits, populated from the example inputs in `references/1-plan-inputs-template.md` and the example history in `references/2-attainment-history-template.md`. Section order and heading text are stable — a finance model or a plan-document template can parse against them.
---
# Comp plan draft — FY27 Mid-Market AE
plan_year: 2027 | headcount: 34 | history rows: 41 (incl. 9 terminated)
quota shift vs prior plan: +12.9% (within 15% tolerance)
requires_counsel_review: true
## Verdict: draft
Curve lands 21% under budget at the observed distribution and the median rep earns 77% of OTE. The plan is priced for the budget, not the market. The clawback trigger fails the reversibility test and must be redrafted before counsel review.
## 1. Plan structure
| component | metric | weight | notes |
|---|---|---|---|
| base | — | 50% of OTE | 100,000 |
| commission | closed-won ARR | 45% of OTE | 9.375% of ARR, 90,000 at 100% |
| SPIF | new-logo multi-year | 5% of OTE | 10,000 pool, expires 2027-06-30 |
Earning event: `booking`. Draw: none. Dispute window: 15 days, escalating RevOps → VP Sales → CFO.
## 2. Curve
| band | attainment | rate | payout at band ceiling |
|---|---|---|---|
| threshold | 0-50% | 0% | 0 |
| target | 50-100% | 9.375% of ARR | 90,000 |
| accelerator 1 | 100-130% | 1.5x base rate | 130,500 |
| accelerator 2 | 130%+ | 2.0x base rate | uncapped |
The threshold is a gate, not a ramp: a rep who clears 50% is paid on every dollar from the first, and a rep at 49% is paid nothing variable. That is a deliberate cliff and it is the single most disputed line in any plan that has one — the 49% rep and the 51% rep are 20,000 apart on a difference of one deal.
## 3. Modeled cost — back-cast on 41 rep-years, 34 plan heads
| case | company attainment | variable cost | vs budget (3,060,000) |
|---|---|---|---|
| low | observed -10 pts | 1,940,000 | -37% |
| observed | 61% median | 2,410,000 | -21% |
| high | observed +10 pts | 2,980,000 | -3% |
Cost moves 43% across the 20-point band. Under the prior curve (60% threshold, 1.4x single accelerator) the same 41 rep-years would have cost 2,265,000 — the new plan is 6.4% more expensive at identical performance, almost entirely from the second accelerator tier.
## 4. Rep earnings by decile
| percentile | attainment | modeled earnings | vs OTE (200,000) |
|---|---|---|---|
| p10 | 34% | 100,000 | 50% |
| p50 | 61% | 154,900 | 77% |
| p90 | 141% | 250,300 | 125% |
Nine of the 41 rep-years land below the 50% threshold and earn base only. Three of those nine are terminated rows, which is the expected pattern and the reason the terminated set has to be in the file.
## 5. Policy check
| item | state | status |
|---|---|---|
| written agreement, signed by employer | CA | present in draft |
| signed acknowledgment of receipt | CA | present in draft |
| method of computing commissions stated | CA | present in draft |
| chargeback policy stated in agreement | CA | present in draft |
| clawback trigger defined before payment | all | present in draft |
| clawback tied to a reversible earning event | all | **FAIL** — see below |
| recovery cannot breach minimum wage in a pay period | CA, NY, WA | not modeled — no draw schedule supplied |
| post-termination recovery | all | disabled in draft (`post_termination: false`) |
This is a checklist for counsel, not a legal opinion. It reports which items the draft addresses and which it does not.
## 6. What to change
- **Clawback reversibility.** The inputs file sets `earning_event: booking` and a clawback trigger of customer non-payment within 90 days of invoice. Those describe different events: the commission is earned when the deal is booked, and non-payment happens downstream of an earning event that never depended on collection. Either move `earning_event` to `cash_collected`, or narrow the trigger to contract cancellation before invoice. As drafted this is the condition most likely to fail if a recovery is challenged.
- **The median rep earns 154,900 against a 200,000 OTE**, while the plan spends 650,000 less than the approved budget. The curve is not the cause. At a 61% median attainment, no defensible quota-to-OTE ratio pays the median rep target — quota would have to drop to roughly 590,000, a 3.0x ratio, to put the median at 100%. The proposed 960,000 quota against a 200,000 OTE is 4.8x. Fix the input (coverage, territory, ramp) or accept that this plan pays half the team 77% of OTE and say so at hire rather than in month nine.
- **Minimum-wage floor is unmodeled** because no draw was supplied. With `draw.type: none` the base alone clears the floor in every listed state, so this is informational — but if a recoverable draw is added later, the 25%-per-pay-period recovery cap has to be re-checked against it.
- **Cost leverage of 43% across 20 points** is a real exposure in a good year. It is defensible; it should be a decision somebody makes in December rather than a surprise in Q3.