serejaris/pm-feedback
Классифицирует пользовательский фидбек (Excel/CSV/текст) по 6 категориям, делает sentiment-анализ, кластеризацию тем, анализ трендов, триангуляцию по источникам, расчёт NPS и извлечение персон. На выходе — Top-10 болей с рекомендациями к действию. User-invoked only — do NOT auto-trigger. Triggers on /pm-feedback, "анализ обратной связи", "разбор отзывов", "анализ NPS", "analyze user feedback", "VOC analysis", "NPS analysis", "review analysis".
npx skills add https://github.com/serejaris/personal-corp-skills --skill pm-feedback
Part of the Personal Corp framework — running a one-person business through AI agents.
Structure raw feedback into a decision-driving insight report. Built-in classification, sentiment, theme clustering, NPS, trend analysis, source triangulation, and persona extraction.
| Field | Required | Notes |
|---|---|---|
| Feedback data | yes | Excel / CSV / pasted text / review screenshots |
| Purpose | no | Product improvement / satisfaction / topic-specific (e.g. post-launch reaction); default product improvement |
| Time range | no | For freshness tagging and trend analysis |
| Source channels | no | Multiple channels enable triangulation |
Mode: ≤ 20 items → close-read mode (item-by-item with detailed reading); > 20 → statistical mode (auto-classify + aggregated report).
Six-category taxonomy:
| Category | Criterion | Example |
|---|---|---|
| Feature request | User wants something not yet built | "I'd like batch export" |
| Bug report | Existing feature behaves incorrectly | "Save button loses my data" |
| Usage question | User can't find or doesn't know how | "How do I change my password?" |
| UX complaint | Feature exists but experience is poor | "Loading is too slow" / "UI too cluttered" |
| Positive review | Satisfaction, praise, recommendation | "Love this feature!" |
| Other | Unclassifiable or off-topic | Spam, ads, noise |
When ambiguous (one item spans multiple), tag primary + secondary.
| Sentiment | Signals | Calibration |
|---|---|---|
| Positive | Likes, praise, recommends, thanks | Pure factual praise ("works") = neutral, not positive |
| Neutral | Statement of fact, question, calm suggestion | Feature requests = neutral by default unless angry |
| Negative | Complaint, anger, disappointment, threats | "I wish you supported X" = neutral; "Why don't you support X yet?" = negative |
Negative-intensity grading:
Apply two methods to extract core themes.
Method A — Affinity mapping:
Method B — Thematic coding:
Cluster output:
| Theme | Sub-theme | Mentions | Share | Representative quote |
|---|---|---|---|---|
| {theme 1} | {sub-a} | {N} | {X%} | "verbatim quote" |
MoM (or WoW) change calculation:
Inflection-point detection:
Trend output:
When data spans multiple channels, cross-validate to lift confidence.
Method triangulation: same problem confirmed by different methods
Source triangulation: same finding across channels
Time triangulation: persistence of the same problem
Confidence tiers:
| Tier | Conditions | Tag |
|---|---|---|
| High | Multi-source + multi-method + persistent | Decision-ready |
| Medium | 2 of the 3 dimensions support | Recommend more data before deciding |
| Low | Single source or single method | Reference only, validate further |
Identify typical user types from the feedback corpus.
Method:
Persona template:
[Persona name]: {one-sentence description}
- Typical traits: {usage frequency, focus, behavior pattern}
- Core need: {primary concern}
- Main pain: {recurring problem}
- Feedback style: {how they express}
- Estimated share: {% of feedback corpus}
- Quote: "{verbatim}"
Cap at 3-5 personas — more loses actionability.
Pain priority = Frequency × Severity × User weight × Confidence
| Dimension | Scoring |
|---|---|
| Frequency | High (> 10) = 3, Medium (3-10) = 2, Low (< 3) = 1 |
| Severity | Critical (feature broken) = 3, Severe (blocks core flow) = 2, Mild (annoying but usable) = 1 |
| User weight | Paying = 1.5, Free = 1.0 (or 1.0 if no segmentation data) |
| Confidence | High (triangulated) = 1.2, Medium = 1.0, Low (single source) = 0.8 |
Sort descending; output Top 10.
# User Feedback Analysis Report
**Period:** {date range}
**Total feedback:** {N} (after dedup: {M})
**Sources:** {channel list}
## 1. Classification
| Category | Count | Share | MoM change (if available) |
|---|---|---|---|
## 2. Sentiment
**Positive:** {X}% | **Neutral:** {Y}% | **Negative:** {Z}%
(Negative breakdown: mild {a} / medium {b} / severe {c})
## 3. Themes
| Theme | Sub-theme | Mentions | Share | Confidence |
|---|---|---|---|---|
## 4. NPS (if rating data)
**Score:** {n} (Promoters {X}% − Detractors {Y}%)
**Benchmark:** {above/below} industry by {Δ}
## 5. Trends (if time data)
- Significant rises: {category}, +{X}% MoM
- Significant drops: {category}, −{X}% MoM
- Inflection events: {description}
## 6. Top 10 Pain Points
| Rank | Pain | Freq | Severity | Confidence | Score | Quote | Recommendation |
|---|---|---|---|---|---|---|---|
## 7. Personas
<!-- 3-5 personas -->
## 8. Key Insights
<!-- Each insight: finding + data + confidence + meaning -->
1. {insight 1}
2. {insight 2}
3. {insight 3}
## 9. Improvement Recommendations
| Priority | Recommendation | Linked pain | Expected impact | Validation method |
|---|---|---|---|---|
## 10. Statistical Notes
- Classification confidence: {high/medium} (sample {N})
- Ambiguous classifications: {count}
- Triangulation coverage: {X%} of findings multi-source verified
- Validity: {sufficient sample / limited sample, results reference-only}
/pm-prioritize — feature requests from feedback → RICE-rank/pm-prd — high-frequency requests → PRDs/pm-competitive — competitor mentions in feedback → enrich competitor study/pm-metrics — cross-validate feedback trends with product metricsTake serejaris/pm-feedback from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.