| name | success-plan-progress-review |
| description | Reviews an existing success plan canvas and generates a structured progress review artifact with milestone scorecard, OCV outcome ratings, CSM action list, and optional customer-facing summary and QBR pre-work note. |
| version | 1.0.0 |
| author | todd@successhacker.co |
| tags | ["csm","success-plan","progress-review","customer-success"] |
| deployment_target | plugin |
/csm:success-plan-progress-review
[PROPOSED]
Overview
csm:success-plan-progress-review generates a structured progress review artifact by reading an upstream success plan canvas and incorporating milestone and OCV updates provided by the CSM.
Use When
- A CSM needs to generate a structured progress review against an existing success plan canvas
- Reviewing milestone status (On Track / At Risk / Missed) for a customer account
- Assessing OCV outcome progress (Delivered / In Progress / Not Started / Blocked)
- Evaluating success criteria met/not-met status against plan targets
- Preparing for a QBR and need a pre-work note or customer-facing summary
- Capturing a point-in-time progress snapshot for an account
Do NOT Use For
- Generating or modifying success plan canvases — use
csm:success-plan-canvas [operation=generate]
- Sending or drafting customer communications — use
csm:customer-comms
- Health score calculation or portfolio-level reporting — use
rev-ops:portfolio-health-report
- Automated milestone detection — the CSM provides milestone updates explicitly
- Writing to OCV files — this skill is read-only with respect to canvas and OCV files
Typical Activation
"/csm:success-plan-progress-review Acme Corp"
"How is [account] tracking against their success plan?"
"Review progress on [customer]'s goals"
"Pull the success plan progress for [account] before my QBR"
Inter-skill contract:
csm:success-plan-canvas [operation=generate or refresh]
↓ emits context/success-plan-[safe_account]-[YYYY-MM-DD].md
csm:success-plan-progress-review [operation=review]
↓ reads canvas file → emits context/progress-review-[safe_account]-[YYYY-MM-DD].md
This skill is the downstream consumer. The upstream canvas must exist before a review can be generated.
Operations
operation: review
Reviews an existing success plan canvas and produces a dated progress review document.
Upstream canvas file resolution:
The skill locates the canvas at context/success-plan-[safe_account]-[canvas_date].md. If canvas_date is not provided, the skill scans for the most recent canvas file for the account using the safe_account-derived filename prefix.
If no canvas file is found, the skill returns the following error and produces no partial output:
Error: No success plan canvas found for [account_name].
Expected file: context/success-plan-[safe_account]-[YYYY-MM-DD].md
Run csm:success-plan-canvas [operation=generate] first.
Inputs:
| Field | Type | Required | Description |
|---|
operation | string | Yes | Must be "review" |
account_name | string | Yes | Account name — used to locate upstream canvas file and derive safe_account |
csm_name | string | Yes | Name of CSM conducting the review — display-only |
review_date | string | No | ISO date of review (defaults to today if not provided) |
canvas_date | string | No | ISO date of canvas to review against (defaults to most recent canvas for account) |
milestone_updates | list | Yes | List of milestone objects: {milestone_name, status, notes} where status is one of On Track, At Risk, Missed |
ocv_updates | list | No | List of OCV outcome objects: {outcome_name, status, notes} where status is one of Delivered, In Progress, Not Started, Blocked |
key_benefits_realized | list | No | CSM-provided list of concrete benefits the customer has already realized since the plan was created. When provided, rendered as a subsection of the Progress Scorecard and optionally surfaced in the customer-facing summary |
success_criteria_status | list | No | List of success criteria assessment objects: {criterion, met, notes} where met is boolean. When provided, adds a Success Criteria Evaluation section |
include_customer_summary | boolean | No | Default: false. When true, generates a customer-facing summary section using templates from reference/customer-summary-templates.md |
include_qbr_note | boolean | No | Default: false. When true, generates a QBR pre-work note section |
notes | string | No | CSM freeform notes — appended to the review document as display-only text |
safe_account derivation:
account_name → lowercase → replace all non-alphanumeric characters with - → collapse consecutive hyphens to a single - → trim to 30 characters.
Examples:
"Acme Corp" → acme-corp
"TechCo, Inc." → techco-inc
"Global Health & Wellness Partners" → global-health-wellness-partners
Auto-ID generation:
Format: REVIEW-[ACCT]-[YYYYMMDD]
ACCT: first 4 alphabetic characters of account_name, uppercased, non-alpha characters stripped before extraction
"Acme Corp" → ACME
"TechCo" → TECH
"123 Systems" → SYST
YYYYMMDD: review date
Example: REVIEW-ACME-20260517
Output artifact structure:
The review document contains up to 7 structured sections. Three are always present; four are conditional:
| Section | Always Present | Condition |
|---|
| Progress Scorecard | Yes | Always; includes ### Key Benefits Already Realized subsection when key_benefits_realized is provided |
| OCV Outcome Status | No | ocv_updates list provided and non-empty |
| Success Criteria Evaluation | No | success_criteria_status list provided |
| CSM Action List | Yes | Always (may note "No actions required — all milestones On Track" if applicable) |
| Customer-Facing Summary | No | include_customer_summary: true; includes benefits realized when key_benefits_realized provided |
| QBR Pre-Work Note | No | include_qbr_note: true |
| Notes | Yes | Always (rendered as empty section if no notes provided) |
Section assembly order in the output file is fixed: Progress Scorecard → OCV Outcome Status → Success Criteria Evaluation → CSM Action List → Customer-Facing Summary → QBR Pre-Work Note → Notes.
Console summary returned after successful execution:
Review generated.
review_id: REVIEW-[ACCT]-[YYYYMMDD]
account: [account_name]
csm: [csm_name]
review_date: [review_date]
canvas_ref: [plan_id from canvas frontmatter]
at_risk: [n]
missed: [n]
file: context/progress-review-[safe_account]-[YYYY-MM-DD].md
Output file naming pattern:
context/progress-review-[safe_account]-[YYYY-MM-DD].md
Multiple reviews on the same date for the same account overwrite the prior file (no versioning in v1.0.0).
Output Format
YAML frontmatter fields in the output file:
---
review_id: REVIEW-ACME-20260517
account_name: Acme Corp
canvas_reference: context/success-plan-acme-corp-2026-05-17.md
plan_id: CANVAS-ACME-20260517
review_date: 2026-05-17
csm_name: Jane Smith
created_at: 2026-05-17T14:00:00Z
created_by: todd@successhacker.co
milestone_summary:
on_track: 3
at_risk: 1
missed: 0
includes_key_benefits_realized: true
includes_success_criteria_evaluation: false
includes_customer_summary: false
includes_qbr_note: true
---
Immutable fields (set at creation; not modified in subsequent operations):
| Field | Reason |
|---|
review_id | Identity key |
created_at | Audit timestamp |
created_by | Audit identity |
canvas_reference | Source artifact reference — must match upstream canvas used at review time |
account_name | Account identity |
Document body header:
# Progress Review: [account_name] — [review_date]
**CSM:** [csm_name]
**Review Date:** [review_date]
**Canvas Reference:** [plan_id]
---
Progress Scorecard section format:
## Progress Scorecard
| Milestone | Status | Notes |
|-----------|--------|-------|
| [milestone_name] | On Track / At Risk / Missed | [notes] |
### Key Benefits Already Realized
(Conditional — present when key_benefits_realized provided)
- [benefit 1]
- [benefit 2]
OCV Outcome Status section format (conditional):
## OCV Outcome Status
| Outcome | Status | Notes |
|---------|--------|-------|
| [outcome_name] | Delivered / In Progress / Not Started / Blocked | [notes] |
Success Criteria Evaluation section format (conditional):
## Success Criteria Evaluation
| Criterion | Met | Notes |
|-----------|-----|-------|
| [criterion] | Yes / No | [notes] |
CSM Action List section format:
## CSM Action List
(Actions generated from At Risk and Missed milestones per milestone-rating-guide.md)
| Milestone | Status | Recommended Action |
|-----------|--------|--------------------|
| [milestone_name] | At Risk / Missed | [action] |
(When all milestones are On Track: "No immediate actions required — continue monitoring.")
Customer-Facing Summary section format (conditional):
## Customer-Facing Summary
(Tone determined by milestone mix per customer-summary-templates.md)
[Customer-facing narrative paragraph(s)]
**Key Benefits Realized** (conditional — when key_benefits_realized provided)
[Benefits realized in customer-facing language]
QBR Pre-Work Note section format (conditional):
## QBR Pre-Work Note
**Milestone Summary:** [on_track] on track, [at_risk] at risk, [missed] missed
**Key Wins:** [list]
**Open Risks:** [list]
**Suggested Discussion Agenda:**
- [item]
Notes section format:
## Notes
[CSM freeform notes, or empty]
Pre-flight
Read ~/.claude/plugins/config/claude-for-customer-success/csm/CLAUDE.md and
~/.claude/plugins/config/claude-for-customer-success/company-profile.md.
If either is missing or contains [PLACEHOLDER] markers, stop and prompt for
/csm:cold-start-interview.
Note from config:
- CS motion — shapes how directive vs. collaborative the progress review framing is
- Health model — provides context for milestone status interpretation and escalation thresholds
- Escalation matrix — required if milestone ratings trigger escalation routing
- Integrations — determines which data sources are available for canvas and OCV resolution
context/ path resolution: Inter-skill artifacts (context/success-plan-* and context/progress-review-*) resolve relative to the session working directory at runtime. In a Claude Code plugin deployment, this is the directory from which Claude Code is launched. Both this skill and csm:success-plan-canvas must operate from the same working directory for the inter-skill contract to hold.
G-code dependency: All G-code guardrails referenced in this skill (G1–G9) are defined in the CLAUDE.md config loaded above. If Pre-flight halts or config is missing, G-codes are undefined — do not proceed with partial config.
Reasoning Protocol
Blueprint: references/reasoning-blueprint.md (on-demand only)
Before generating output, apply these primers:
-
CLASSIFY — Determine operation validity and data completeness before proceeding:
- Is
operation present and equal to "review"? If absent or any other value → return an error and halt before any output.
- Is
account_name non-empty? If not → reject immediately with a clear error; do not attempt canvas resolution.
- Does an upstream canvas file exist for this account (located via
canvas_date or most-recent scan)? If not → return the canonical canvas-not-found error and halt; produce no partial output.
- Are
milestone_updates provided and non-empty? If absent → halt with a missing-required-input error; the progress scorecard cannot be generated without milestone data.
- CLASSIFY is complete when: operation confirmed as
"review", account_name validated, canvas file located and readable, milestone_updates present.
-
CONSTRAINTS — Apply before generating any output (blocking before non-blocking):
- C-1 BLOCKING:
account_name must be non-empty — reject all operations if absent; safe_account derivation cannot proceed.
- C-2 BLOCKING: Canvas file must exist for the target account before any review output is generated — return the canonical error message exactly as specified; do not generate partial output.
- C-3 BLOCKING:
milestone_updates must be provided and non-empty — the Progress Scorecard is always-present and cannot be built without milestone data.
- C-4 BLOCKING: Each
milestone_updates[].status value must be one of On Track, At Risk, Missed — halt with a validation error on any invalid value; do not process the remaining list.
- C-5 BLOCKING: Each
ocv_updates[].status value (when provided) must be one of Delivered, In Progress, Not Started, Blocked — halt with a validation error on any invalid value.
- C-6 Non-blocking:
safe_account derivation (lowercase → replace non-alphanumeric with - → collapse hyphens → trim to 30 chars) must be applied before any file path construction — never use raw account_name in a path.
- C-7 Non-blocking: Canvas content is read-only; this skill never writes to canvas files or OCV files under any condition — write scope is
context/progress-review-* only.
- G5: Internal data (health scores, ARR, expansion signals) must never appear in customer-facing output
- G7: Flag any data older than 30 days with source date and staleness indicator
-
EXPERT CHECK — What a veteran CSM verifies before generating a progress review:
- Do the
milestone_updates statuses reflect the current state rather than the planned state? A CSM who copies milestone names from the canvas without providing actual status assessments produces a review that adds no signal. Flag if all milestones are listed as On Track with no notes — this pattern often signals incomplete input rather than genuine account health.
- For
At Risk milestones: does each entry include a notes field with a specific reason? A bare At Risk status without a root cause observation produces a CSM Action List with generic recommendations — flag for input enrichment.
- For
Missed milestones: has the escalation threshold check (Step 8, reference/milestone-rating-guide.md § 2) been applied? A missed milestone on a high-ARR account or near-renewal account may trigger escalation — this check must not be skipped.
- If
include_customer_summary: true: does the milestone mix support the tone selected from the template? A cautionary summary generated from an all-On Track milestone set is misaligned — verify tone selection against the actual milestone_summary counts.
- If
include_qbr_note: true: are key_benefits_realized entries present? A QBR Pre-Work Note without Key Wins forces the template to fall back to On Track milestones — this produces weaker pre-work material; prompt the CSM to provide explicit benefits if absent.
-
ANTI-PATTERNS — Mistakes to catch before generating output:
- AP-1 Partial output on canvas-not-found: beginning any section generation before the canvas file has been confirmed readable — the error path must halt all output, not produce a partial review with a warning appended.
- AP-2 Invalid status values silently coerced: accepting a
milestone_updates[].status of "Delayed" or "Complete" and mapping it to a valid enum value — invalid values must surface as validation errors, not be silently normalized.
- AP-3 Customer-facing summary with internal language: allowing health tier labels (
Red, Yellow, Green), escalation routing details, ARR values, or internal action items to appear in the Customer-Facing Summary section — customer output is firewalled from internal language.
- AP-4 Notes field overwrite: if a prior review file exists for the same account and date, overwriting prior notes without surfacing the conflict — v1.0.0 behavior is overwrite, but the CSM should be aware.
- AP-5 QBR note without risk acknowledgment: generating a QBR Pre-Work Note that lists only Key Wins when At Risk or Missed milestones are present — the Open Risks section must reflect the milestone mix, not be omitted for tone reasons.
After execution, verify:
- Does the output file contain all required sections in fixed order (Progress Scorecard → OCV Outcome Status → Success Criteria Evaluation → CSM Action List → Customer-Facing Summary → QBR Pre-Work Note → Notes)? Are conditional sections present only when their conditions were met?
- Is the YAML frontmatter complete? Are
review_id, canvas_reference, plan_id, milestone_summary counts, and all includes_* boolean flags correctly populated?
- For any
At Risk or Missed milestones: does the CSM Action List contain specific actions (not generic "monitor closely" entries)?
- Is the
safe_account derivation applied correctly in the output file path? Does canvas_reference point to the exact canvas file that was read?
- Is the customer-facing language firewall intact? No health scores, escalation identifiers, ARR values, or internal routing language in the Customer-Facing Summary or QBR Pre-Work Note.
- Confidence: [High] if canvas file confirmed readable with complete frontmatter, all milestone statuses are valid enum values, and
milestone_updates entries include notes / [Medium] if canvas file located but some frontmatter fields missing, or milestone entries lack notes for At Risk/Missed statuses / [Low] if canvas file not found and operating on CSM-provided description only, or if milestone_updates statuses are unvalidated — state which.
Execute the following steps in order for every review operation. Do not skip steps or reorder them.
Step 1 — Resolve safe_account
Derive safe_account from account_name: lowercase → replace all non-alphanumeric characters with - → collapse consecutive hyphens → trim leading/trailing hyphens → truncate to 30 characters. Store as the path-construction token. The original account_name is display_account — used only in document content.
Step 2 — Locate upstream canvas file
If canvas_date is provided, attempt to read context/success-plan-[safe_account]-[canvas_date].md. If canvas_date is not provided, scan context/success-plan-[safe_account]-*.md for the most recent file by date suffix. If no matching canvas file is found, return the error message exactly as specified and halt — produce no partial output:
Error: No success plan canvas found for [account_name].
Expected file: context/success-plan-[safe_account]-[YYYY-MM-DD].md
Run csm:success-plan-canvas [operation=generate] first.
Step 3 — Read canvas frontmatter
From the located canvas file, extract: plan_id, plan_type, csm_name (if csm_name input is not provided), and account_stage. These values populate the review document frontmatter and inform section structure expectations based on plan_type (initial vs expansion vs renewal-refresh).
Step 4 — Generate review_id
Format: REVIEW-[ACCT]-[YYYYMMDD]. Derive ACCT: strip all non-alphabetic characters from account_name, take the first 4 characters, uppercase. Derive YYYYMMDD from review_date (or today if not provided) with hyphens removed.
Step 5 — Build Progress Scorecard
Iterate milestone_updates. Validate each status value against the allowed enum (On Track, At Risk, Missed); halt with validation error on any invalid value. Count on_track, at_risk, and missed totals for milestone_summary. Render the milestone status table. If key_benefits_realized is provided and non-empty, append the ### Key Benefits Already Realized subsection and set includes_key_benefits_realized: true.
Step 6 — Build OCV Outcome Status section (conditional)
If ocv_updates is provided and non-empty, validate each status value against the OCV enum (Delivered, In Progress, Not Started, Blocked). Render the OCV outcome status table. If ocv_updates is absent or an empty list, omit this section entirely.
Step 7 — Build Success Criteria Evaluation section (conditional)
If success_criteria_status is provided, render the success criteria table with met displayed as Yes / No. Set includes_success_criteria_evaluation: true. Apply evaluation logic from reference/milestone-rating-guide.md § 4 — flag unmet criteria with no corresponding At Risk or Missed milestone for additional CSM action items.
Step 8 — Build CSM Action List
Apply action generation logic from references/milestone-rating-guide.md § 3. For each At Risk milestone, generate investigation and intervention actions. For each Missed milestone, generate recovery and escalation actions. Apply escalation threshold logic from § 2. If all milestones are On Track, render: "No immediate actions required — continue standard monitoring cadence."
Step 9 — Build Customer-Facing Summary (conditional)
If include_customer_summary: true, select the appropriate tone template from reference/customer-summary-templates.md based on the milestone mix (positive / cautionary / escalation). Incorporate key_benefits_realized using customer-facing language guidance from that file. Set includes_customer_summary: true.
Step 10 — Build QBR Pre-Work Note (conditional)
If include_qbr_note: true, generate the QBR Pre-Work Note using the template from reference/customer-summary-templates.md § 5. Populate Key Wins from key_benefits_realized (or On Track milestones if key_benefits_realized is absent). Populate Open Risks from At Risk and Missed milestones. Set includes_qbr_note: true.
Step 11 — Assemble and write output file
Construct the YAML frontmatter block with all required fields. Assemble document sections in fixed order: Progress Scorecard → OCV Outcome Status → Success Criteria Evaluation → CSM Action List → Customer-Facing Summary → QBR Pre-Work Note → Notes. Write the complete document to context/progress-review-[safe_account]-[review_date].md. Return the console summary.
Reviewer note
⚠️ Reviewer note
- Sources: [CS Platform ✓ live — usage, milestone data | CS Platform [configured but unverified] | CRM ✓ live — account context | CRM [configured but unverified] | document storage: canvas from [date] | user provided | not connected — conversation context only]
- Data as of: [timestamp per source]
- Flagged for your judgment: [N items marked
[review] inline | none]
- Before sending: Confirm progress data is current (CS Platform data >30 days old is directional only). Do not share internal health score components in customer-facing progress summary.
Security & Permissions
- Network access: none
- Filesystem read scope:
context/success-plan-* (upstream canvas files — read-only); context/progress-review-* (own output files — read for conflict detection)
- Filesystem write scope:
context/progress-review-* only
- Subprocess execution: none
- Dynamic code execution: none
This skill does not read, write, or modify any file outside the context/ directory. It does not write to canvas files or OCV files under any condition.
Trust & Verification
account_name is sanitized via the safe_account function (alphanumeric + hyphen, max 30 chars) for all filesystem path construction. The unsanitized value (display_account) is used only in document content — never in path construction.
milestone_updates and ocv_updates list items (including milestone_name, outcome_name, and notes fields) are treated as display-only. They are never used in filesystem path construction, logic branching, or code execution.
notes input is treated as display-only freetext. It is rendered into the Notes section of the output document without interpretation.
csm_name is treated as display-only. It is never used in filesystem path construction.
- Canvas content loaded from the upstream file is rendered into the review document as display content. It is never executed, evaluated, or interpolated into skill logic.
- All path construction uses only
safe_account (derived from account_name) and review_date (ISO date). No other user input reaches path construction.
Reference Files
The following reference files are loaded on-demand during skill execution:
| File | Purpose | Loaded When |
|---|
references/progress-review-schema.md | Canonical review record format, YAML frontmatter field definitions, section assembly order, field validation rules, auto-ID generation rules | Every review operation |
references/milestone-rating-guide.md | Rating criteria for On Track / At Risk / Missed; escalation thresholds; CSM action generation logic per rating; Success Criteria evaluation logic; Measures of Success assessment; Key Benefits Already Realized guidance | Every review operation |
references/customer-summary-templates.md | Customer-facing language templates by milestone status (positive, cautionary, escalation tones); QBR pre-work note structure and language guidance | When include_customer_summary: true or include_qbr_note: true |
references/reasoning-blueprint.md | Problem classification taxonomy, domain heuristics, common failure modes, and expert judgment patterns for this skill | On-demand per Reasoning Protocol |
Examples
Example 1 — Basic progress review
csm:success-plan-progress-review
operation: review
account_name: Acme Corp
csm_name: Jane Smith
milestone_updates:
- milestone_name: "Complete onboarding for 3 admin users"
status: On Track
notes: "All 3 admins completed training last week"
- milestone_name: "Achieve 80% DAU adoption in core module"
status: At Risk
notes: "Currently at 52% DAU; adoption stalled in ops team"
- milestone_name: "Complete integration with Salesforce"
status: Missed
notes: "IT resourcing delayed; now targeting Q3"
What this produces:
- Reads
context/success-plan-acme-corp-[most-recent-date].md
- Creates
context/progress-review-acme-corp-2026-05-17.md
- Output includes: Progress Scorecard, CSM Action List, Notes
- Console summary: 1 At Risk, 1 Missed
Example 2 — Full review with OCV updates, success criteria, customer summary, and QBR note
csm:success-plan-progress-review
operation: review
account_name: Acme Corp
csm_name: Jane Smith
review_date: 2026-05-17
canvas_date: 2026-03-01
milestone_updates:
- milestone_name: "Complete onboarding for 3 admin users"
status: On Track
notes: "All 3 admins certified"
- milestone_name: "Achieve 80% DAU adoption in core module"
status: At Risk
notes: "52% DAU — ops team lagging"
ocv_updates:
- outcome_name: "Reduce manual reporting time by 40%"
status: In Progress
notes: "Reporting automation deployed; measuring impact"
- outcome_name: "Enable real-time pipeline visibility"
status: Delivered
notes: "Live dashboards confirmed by VP Sales"
key_benefits_realized:
- "Admin team onboarded and self-sufficient — no support tickets in 30 days"
- "Real-time pipeline dashboard live — VP Sales confirmed visibility improvement"
success_criteria_status:
- criterion: "3 admin users certified"
met: true
notes: "All 3 completed certification 2026-04-15"
- criterion: "80% DAU in core module"
met: false
notes: "Currently 52%; ops team adoption lagging"
include_customer_summary: true
include_qbr_note: true
notes: "QBR scheduled for 2026-06-01. Ops team adoption is the key risk to address."
What this produces:
- Reads
context/success-plan-acme-corp-2026-03-01.md (explicit canvas_date)
- Creates
context/progress-review-acme-corp-2026-05-17.md
- Output includes all 7 sections: Progress Scorecard (with Key Benefits Already Realized subsection), OCV Outcome Status, Success Criteria Evaluation, CSM Action List, Customer-Facing Summary (with benefits realized), QBR Pre-Work Note, Notes
- Console summary: 1 At Risk, 0 Missed