Surface PMF signals from rejection feedback: feature_gap notes and competitor presence (already_have_solution / competitor_locked). Read-only product reflection, not sales tactics. Triggers: \"check feedback\", \"PMF signals\".
Scanned 9/3/2026
Install to Claude Code
npx -y skills add aitit-inc/leadace --skill check-feedback --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Check Feedback?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/aitit-inc-check-feedback)More formats (shields.io, HTML) on the badges page.
---
name: check-feedback
description: "Surface PMF signals from rejection feedback: feature_gap notes and competitor presence (already_have_solution / competitor_locked). Read-only product reflection, not sales tactics. Triggers: \"check feedback\", \"PMF signals\"."
argument-hint: "<project-id>"
allowed-tools:
- Read
- mcp__plugin_leadace_leadace__get_rejection_feedback_summary
---
# Check Feedback - PMF Signals from Rejection Feedback
A read-only skill that surfaces **product/pricing/business-model** signals from rejection feedback recorded by `/check-responses`. Use this for PMF reflection — questions like "is there a missing feature people keep asking for?" or "are we losing to a specific competitor?".
This skill is **not** for sales tactics. Tactical signals from rejections (when to recontact, who to redirect to, which industries to deprioritize) are consumed automatically by `/evaluate` in the daily cycle. Do not use `/check-feedback` to drive operational decisions.
**Before starting:** `Read` `${CLAUDE_PLUGIN_ROOT}/references/workspace-conventions.md` and follow the cross-cutting conventions there (data storage, MCP error handling, document writes, output discipline).
## Steps
### 1. Verify Arguments
- Project ID: `$0` (required)
Return an error if `$0` is empty.
### 2. Fetch Two Windows in Parallel
Call `get_rejection_feedback_summary` twice in parallel, both with `scope: "pmf"`:
1. `projectId: "$0"`, `windowDays: 30`, `scope: "pmf"` -> recent
2. `projectId: "$0"`, `scope: "pmf"` (no `windowDays`) -> all-time
If the tool returns "Project not found", instruct the user to run `/leadace` first and abort.
With `scope: "pmf"` the server filters to PMF-relevant reasons only and computes `total` + `percentage` within the PMF subset. `recontactWindows` is returned with all five buckets at `{count: 0, samples: []}` and `decisionMakerPointers` is an empty array — those signals are tactical and consumed by `/evaluate`, not by this skill.
### 3. Format Report
Render in this order. **Always lead with `featureGapNotes`** — that section drives product/roadmap decisions.
#### a. Feature Gap Notes (PMF signal)
Pull from `featureGapNotes` (already ordered most-recent-first). For each entry:
```
- {receivedAt, ISO date} — {organizationName} / {prospectName}
"{freeText}"
```
If empty in both windows, render: "No `feature_gap` rejections recorded yet."
#### b. PMF-Relevant Reason Distribution
Render side-by-side: 30-day vs all-time. With `scope: "pmf"` the response's `primaryReasonDistribution` contains only:
- `feature_gap` — concrete missing capability (highest PMF signal)
- `already_have_solution` — incumbent vendor presence (competitive pressure)
- `competitor_locked` — multi-year contract / renewal-only window (competitive pressure)
`count`, `percentage`, and `total` are all computed within the PMF subset by the server — render them as-is. Skip rows where both windows are 0.
```
Reason 30 days all-time
feature_gap N (PP%) N (PP%)
already_have_solution N (PP%) N (PP%)
competitor_locked N (PP%) N (PP%)
PMF-relevant total N N
```
If `total` is 0 in both windows, render: "No PMF-relevant rejections recorded yet."
### 4. Closing Note
End with one short, plain-English summary. Decide which line to write in this order — first match wins:
1. **Thin signal** — if `total` (from the response) is < 3, say so and recommend continued data collection. Stop.
2. **Capability clustering in `featureGapNotes`** — scan `featureGapNotes[].freeText` for repeated capability/feature terms across entries. If ≥2 notes name the same capability, use the dominant-feature example.
3. **Competitor-pressure share** — if `already_have_solution` + `competitor_locked` together exceed half of the PMF-relevant total, use the competitor example. (Free-text is not returned for these reasons, so do not name a specific vendor.)
4. **Otherwise** — use the mixed example.
Example tones:
- Dominant feature_gap capability: "Multiple recent rejections cite `<feature>` — strongest PMF signal is for that. Consider a strategy revision (refine it via `/leadace`) or product roadmap input."
- High competitor pressure: "A large share of rejections cite an incumbent solution or contract lock-in — competitive pressure is the dominant PMF signal. Consider differentiation messaging (refine the strategy via `/leadace`)."
- Mixed: "Rejection volume is N over 30 days, no single PMF signal dominates. Continue monitoring."
Do not invent product/strategy actions when the data does not support them.
This is a read-only skill — no DB writes, no side effects.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!