skills/user-testing/SKILL.md
Comprehensive persona-based user testing skill for web applications. Simulates how real users from different demographics interact with interfaces, including realistic timing, behavioral patterns, and frustration triggers. Use when: - Testing user interfaces before release - Validating UX flows from diverse perspectives - Conducting accessibility reviews - Optimizing onboarding or checkout experiences - Getting feedback on form design
npx skillsauth add ncklrs/claude-chrome-user-testing user-testingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill enables persona-based user testing that simulates how real users interact with web applications. It combines behavioral psychology, UX research methodologies, and browser automation to provide authentic testing experiences.
| ID | Generation | Tech Comfort | Patience | Key Trait |
|----|------------|--------------|----------|-----------|
| boomer-tech-averse | Boomer | 2/10 | 7/10 | Needs explicit guidance |
| boomer-tech-friendly | Boomer | 6/10 | 8/10 | Prefers familiar patterns |
| millennial-tech-skeptic | Millennial | 7/10 | 5/10 | Skeptical of manipulation |
| genz-digital-native | Gen Z | 9/10 | 3/10 | Expects instant results |
| genalpha-tablet-kid | Gen Alpha | 8/10 | 2/10 | Touch-first, visual |
Each persona has three gender variants with different names and subtle trait adjustments:
Personas are defined in JSON files with this schema:
{
"id": "persona-id",
"name": "Display Name",
"generation": "boomer|millennial|genz|genalpha",
"techComfort": 1-10,
"patience": 1-10,
"genderVariants": {
"male": { "name": "...", "pronouns": "he/him", "traits": [...] },
"female": { "name": "...", "pronouns": "she/her", "traits": [...] },
"neutral": { "name": "...", "pronouns": "they/them", "traits": [...] }
},
"traits": {
"readingSpeed": "slow|medium|fast",
"clickConfidence": "hesitant|normal|decisive",
"errorRecovery": "confused|methodical|adaptive",
"scrollBehavior": "careful|normal|impatient",
"formFilling": "cautious|normal|rushed"
},
"timing": {
"baseReadingWPM": 100-400,
"clickDelay": 300-3000,
"hoverBeforeClick": 200-1500,
"confusionPause": 5000-30000,
"successPause": 300-2000,
"pageLoadTolerance": 2000-10000
},
"narrationStyle": {
"vocabulary": "simple|moderate|technical|casual",
"frustrationThreshold": 1-10,
"verbosity": "quiet|normal|chatty",
"expressions": ["...", "..."]
},
"frustrationTriggers": ["...", "..."],
"positiveReactions": ["...", "..."],
"typicalBehaviors": ["...", "..."]
}
base_time = (word_count / persona.timing.baseReadingWPM) * 60 * 1000 // ms
adjusted_time = base_time * complexity_modifier
final_time = adjusted_time * random(0.8, 1.2) // Add variance
Complexity Modifiers:
| Action | Tech-Averse | Tech-Friendly | Tech-Skeptic | Digital Native | Tablet Kid | |--------|-------------|---------------|--------------|----------------|------------| | Click | 2000-3000ms | 800-1200ms | 600-1000ms | 200-400ms | 300-600ms | | Form field | 1500ms | 800ms | 600ms | 200ms | 400ms | | Decision | 5000ms | 2000ms | 3000ms | 500ms | 1000ms | | Confusion | 20000ms | 10000ms | 8000ms | 5000ms | 3000ms |
When a persona encounters confusing UI:
During testing, output continuous first-person narration:
[10:32:15] [Gen Z - Jayden] [NAVIGATE]
"Okay let's see what this is about..."
[10:32:18] [Gen Z - Jayden] [SCAN]
"Lot of text... skip... skip... where's the sign up button?"
[10:32:20] [Gen Z - Jayden] [CLICK]
"There it is. Let's go."
[10:32:25] [Gen Z - Jayden] [FRUSTRATION]
"Bruh, why do they need my phone number?? This is sus."
# User Testing Report
## Session Overview
- **Persona**: [Name] ([ID])
- **Gender Variant**: [Male/Female/Neutral]
- **URL Tested**: [URL]
- **Tasks Attempted**: [List]
- **Overall Success**: [X/Y tasks completed]
## Executive Summary
[1-2 paragraph overview]
## Task Analysis
### Task 1: [Description]
- **Status**: Completed / Partial / Failed
- **Time**: [Duration]
- **Confusion Points**:
- [Timestamp]: [What caused confusion]
- **Screenshots**: [Links]
## Usability Issues
### Critical (Task Blockers)
1. **[Issue]**
- Personas affected: [List]
- Evidence: [Screenshot/description]
- Recommendation: [Fix]
### Major (High Frustration)
...
### Minor (Suboptimal)
...
## Persona-Specific Insights
[Observations unique to this persona's worldview]
## Prioritized Recommendations
| Priority | Issue | Recommendation | Affected Personas |
|----------|-------|----------------|-------------------|
| P0 | ... | ... | All |
| P1 | ... | ... | Tech-averse |
/user-test --url https://example.com --persona genz-digital-native
/user-test --url https://shop.example.com --persona boomer-tech-averse --tasks "find product, add to cart, checkout"
/user-test --url https://app.example.com --persona millennial-tech-skeptic --gender f
/user-test --url https://example.com --persona genalpha-tablet-kid --verbose
This skill requires claude --chrome for browser automation:
# Start Claude with Chrome integration
claude --chrome
# Then run user tests
/user-test --url https://your-app.com --persona genz-digital-native
The skill uses Playwright MCP tools:
browser_navigate - Page navigationbrowser_snapshot - Accessibility tree analysisbrowser_click - Element interactionbrowser_type - Text inputbrowser_take_screenshot - Evidence capturedevelopment
# WCAG Auditor Skill This skill provides WCAG 2.1 accessibility audit capabilities, including criteria definitions, check implementations, and scoring logic. ## Purpose Systematically evaluate web pages against WCAG 2.1 Level A and AA success criteria to identify accessibility barriers and provide remediation guidance. ## WCAG 2.1 Overview WCAG is organized around four principles (POUR): - **Perceivable**: Information must be presentable to users - **Operable**: Interface must be usable - *
development
# Stripe Checkout Testing Skill This skill provides guidance for testing Stripe checkout flows with any persona. It handles test card data, form detection, and payment-specific narration. ## Purpose Enable realistic user testing of Stripe payment flows using official test cards, with persona-appropriate reactions to checkout experiences. ## Test Card Reference Load card data from `test-cards.json`. Key scenarios: | Scenario | Card | When to Use | |----------|------|-------------| | `succes
testing
# Smoke Testing Skill Run pre-configured smoke tests for common user flows. Quick validation that critical functionality works. ## What is Smoke Testing? Smoke testing is a quick sanity check to ensure basic functionality works before deeper testing. The name comes from electronics - if you turn on a circuit and smoke comes out, you know something is wrong without further testing. ## When to Use - Before releases to catch obvious breaks - After deployments to verify functionality - In CI/CD
development
# Session Recorder Skill Record user testing sessions as Playwright Traces for replay and analysis. Traces capture the full testing session including screenshots, DOM snapshots, network requests, and console logs. ## When to Use - `--record` flag is present in the command - User wants to replay or share a testing session - Need to debug issues found during testing - Creating documentation of UX issues ## Trace File Format Playwright Trace files (`.zip`) contain: - **Screenshots**: Captured