frustration-hunter
Skill36 starsChanged 15 days agoMITView on GitHub
Finds and ranks user frustration signals — rage clicks, dead clicks, form abandonment, error spikes. Use when asking "what's frustrating users", "where are users struggling", or "what's the biggest UX problem right now". Uses Fullstory's opportunity detection, then drills into sessions for root cause.
In this repository45 other files it gives its agents.
- a11y-analyzerSkill
- annotation-opsSkill
- anomaly-detectorSkill
- api-monitorSkill
- benchmark-analyzerSkill
- campaign-trackerSkill
- changelog-detectiveSkill
- cohort-compassSkill
- comparisonsSkill
- customer-360Skill
- dashboard-builderSkill
- deploy-radarSkill
- error-forensicsSkill
- experiment-analyzerSkill
- feature-adoptionSkill
- form-analyzerSkill
- funnel-doctorSkill
- general-analysisSkill
- heatmap-generatorSkill
- incident-responderSkill
- jira-bug-reporterSkill
- journey-builderSkill
- lifecycle-analyzerSkill
- metric-auditorSkill
- mobile-analyzerSkill
- nps-proxySkill
- onboarding-tutorSkill
- page-performanceSkill
- persona-builderSkill
- predictive-alertsSkill
- privacy-auditorSkill
- query-translatorSkill
- quick-statsSkill
- report-deckSkill
- retention-analyzerSkill
- revenue-impactSkill
- scroll-depth-analyzerSkill
- segment-wizardSkill
- session-playlistSkill
- session-reviewSkill
- session-searchSkill
- slack-reporterSkill
- user-journeySkill
- webhook-healthSkill
- weekly-digestSkill
The file
We split this skill into the rules it gives an agent
12 rules. About 0 are common, 5 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 18
Use free fullstory:discover_groups and fullstory:get_opportunity_stats for live signals.
- Very specific: line 24
Call fullstory:discover_groups for the requested window (default last 7 days, using the live schema).
- Very specific: line 26
If the user asks about a specific page or flow, scope the opportunities to that area.
- Very specific: line 48
If StoryAI Premium lookup tools are available and the user wants pre-ranked stored opportunities, use get_opportunities (time_range="7d", …
- Distinctive: line 57
Look for patterns across sessions:
- Very specific: line 67
If the user wants dimensional breakdowns beyond what get_opportunity_stats provides (browser version, custom user property, etc.):
- Very specific: line 71
If scoping to a cohort, attach a segment first: fullstory:update_metric(metric_id, segment_id) then compute
- Very specific: line 75
Default time range: last_7_days.
- Distinctive: line 76
Start with 3-5 opportunities.
- Distinctive: line 77
Always ground findings in session evidence — numbers tell you "what" and "where", sessions tell you "why."
- Distinctive: line 78
When presenting, include both the metric (user count, device split) and the qualitative finding (what users actually experienced).
- Distinctive: line 79
If an opportunity has a sharp rate-of-change (getting worse fast), flag it prominently.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Frustration Hunter
Find what's frustrating your users, ranked by impact, grounded in real session evidence.
When to Use
- "What are the biggest frustrations on our site right now?"
- "What's causing friction on the checkout flow for mobile users?"
- "What got worse this week vs last week?"
- "Show me the top rage-clicked elements across our product"
- "Find sessions where users are dead-clicking on the settings page"
Use free fullstory:discover_groups and fullstory:get_opportunity_stats for live signals. Discovery accepts one scope at a time (page_id, domain, app_name, segment_id, or funnel_id); use a segment for device/user filters and the live schema for time ranges. Use computed metrics for exact custom windows.
Workflow
Step 1: Discover opportunities
Call fullstory:discover_groups for the requested window (default last 7 days, using the live schema). This returns the top live frustration signals — rage clicks, dead clicks, form abandonment, error spikes — each with a user count and page location.
If the user asks about a specific page or flow, scope the opportunities to that area. If they ask "what got worse," set compare_to_previous=true.
Step 2: Get live stats
For the top 3-5 opportunities, call fullstory:get_opportunity_stats on each. This returns:
- Exact user count (not an estimate)
- Device split (mobile vs desktop percentage)
- Page concentration (which pages it happens on)
- Rate-of-change vs prior period (is it getting worse?)
- Frustration rate vs site average
Present the top frustrations as a ranked list:
1. Rage clicks on "Apply Promo Code" — 412 users, 73% mobile, /checkout
2. Dead clicks on cart icon — 287 users, Safari-specific, /products
3. Form abandonment at password field — 218 users, 22s avg dwell before leavingStep 3: Pull sessions for the worst offenders
For the top 1-3 signals, build a metric describing the observed frustration, compute it, and call fullstory:get_sessions(metric_id="<id>"). Review 3-5 returned sessions per signal.
If StoryAI Premium lookup tools are available and the user wants pre-ranked stored opportunities, use get_opportunities (time_range="7d", or 24h, 14d, 30d), get_opportunity, and get_sessions_for_opportunity. get_managed_funnels is also Premium-only. Otherwise continue with live discovery and metric-backed sessions; do not require an upgrade.
For each session, use the session-context agent to read the transcript with a specific task:
- "Did the user's action succeed or fail? What happened after the frustration event?"
- "What element did they rage-click and did anything change on the page after?"
- "Was there an error in the console when this dead click happened?"
Step 4: Synthesize
Look for patterns across sessions:
- Same element failing across users → likely a bug
- Users clicking non-interactive elements → likely a design issue
- High abandonment after a specific step → likely a UX flow problem
- Errors only on specific browsers/devices → likely a compatibility issue
Present findings with: what's happening, how many users, where it concentrates, what the session evidence shows, and what the likely root cause is.
Deeper cuts
If the user wants dimensional breakdowns beyond what get_opportunity_stats provides (browser version, custom user property, etc.):
- Build a metric for the specific frustration event:
fullstory:build_metric(query="rage clicks on Apply Promo Code", output_type="top_n")with the desired grouping dimension - Compute it:
fullstory:compute_metric(metric_id) - If scoping to a cohort, attach a segment first:
fullstory:update_metric(metric_id, segment_id)then compute
Guidelines
- Default time range:
last_7_days. Ask before using a different window. - Start with 3-5 opportunities. If the pattern is clear, stop.
- Always ground findings in session evidence — numbers tell you "what" and "where", sessions tell you "why."
- When presenting, include both the metric (user count, device split) and the qualitative finding (what users actually experienced).
- If an opportunity has a sharp rate-of-change (getting worse fast), flag it prominently.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

