Simulates diverse user personas interacting with web app UIs, including realistic timing, behaviors, and frustrations. For pre-release testing, UX validation, accessibility reviews, and form optimization.
From user-testing-agentnpx claudepluginhub ncklrs/claude-chrome-user-testing --plugin user-testing-agentThis skill uses the workspace's default tool permissions.
behaviors/timing.jsonpersonas/arabic-rtl-user.jsonpersonas/bad-connection-user.jsonpersonas/boomer-tech-averse.jsonpersonas/boomer-tech-friendly.jsonpersonas/brazilian-user.jsonpersonas/busy-executive.jsonpersonas/cognitive-adhd-user.jsonpersonas/comparison-shopper.jsonpersonas/designer-critic.jsonpersonas/developer-critic.jsonpersonas/distracted-parent.jsonpersonas/genalpha-tablet-kid.jsonpersonas/genz-digital-native.jsonpersonas/german-business-user.jsonpersonas/gift-buyer.jsonpersonas/impulse-buyer.jsonpersonas/index.jsonpersonas/japanese-user.jsonpersonas/keyboard-only-user.jsonDesigns and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
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 capture