skills/session-recorder/SKILL.md
# 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
npx skillsauth add ncklrs/claude-chrome-user-testing skills/session-recorderInstall 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.
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.
--record flag is present in the commandPlaywright Trace files (.zip) contain:
At the beginning of a test session when --record flag is present:
// Via browser_run_code
async (page) => {
// Ensure recordings directory exists
const fs = require('fs');
const path = require('path');
const recordingsDir = process.env.RECORD_PATH || 'recordings';
if (!fs.existsSync(recordingsDir)) {
fs.mkdirSync(recordingsDir, { recursive: true });
}
// Start tracing
await page.context().tracing.start({
screenshots: true,
snapshots: true,
sources: false // Don't include source code
});
return 'Recording started';
}
At the end of a test session:
// Via browser_run_code
async (page) => {
const tracePath = process.env.TRACE_PATH;
await page.context().tracing.stop({ path: tracePath });
return `Trace saved to: ${tracePath}`;
}
Format: {command}-{persona}-{YYYY-MM-DD-HHmmss}.zip
Examples:
user-test-genz-digital-native-2025-01-06-143022.zipstripe-test-impulse-buyer-2025-01-06-143156.zipuser-test-boomer-tech-averse-2025-01-06-150830.zipconst generateTracePath = (command, personaId, basePath = 'recordings') => {
const now = new Date();
const timestamp = now.toISOString()
.replace(/[-:]/g, '')
.replace('T', '-')
.slice(0, 15);
return `${basePath}/${command}-${personaId}-${timestamp}.zip`;
};
When --record flag is detected:
1. Parse --record-path or use default 'recordings/'
2. Generate trace filename
3. Ensure output directory exists
4. Start Playwright tracing
5. Announce: "Starting session recording..."
1. Stop tracing with output path
2. Verify file was created
3. Report: "Session recorded to: {path}"
4. Report: "View at: https://trace.playwright.dev"
Traces can be viewed at: https://trace.playwright.dev
.zip trace file| Tab | Description | |-----|-------------| | Actions | Timeline of all interactions | | Network | HTTP requests and responses | | Console | JavaScript console output | | Source | (Optional) Source code context |
Starting session recording...
"Hi, I'm Harold. Let me see what this website is about..."
[Full narration continues]
Session recorded to: recordings/user-test-boomer-tech-averse-2025-01-06-143022.zip
View trace at: https://trace.playwright.dev (drag and drop the file)
--quiet --record)Testing https://example.com as boomer-tech-averse...
Recording session...
[Screenshot: confusion-nav.png]
[Screenshot: task-complete.png]
# Summary
- Tasks: 2/3 completed
- Issues: 1 critical, 2 major
Session recorded to: recordings/user-test-boomer-tech-averse-2025-01-06-143022.zip
View trace at: https://trace.playwright.dev
--personas --record)Each persona test gets its own trace file:
recordings/
├── user-test-boomer-tech-averse-2025-01-06-143022.zip
├── user-test-genz-digital-native-2025-01-06-143024.zip
└── user-test-millennial-tech-skeptic-2025-01-06-143026.zip
If browser doesn't support tracing:
Warning: Session recording not available. Continuing without recording.
If recordings directory can't be created:
Error: Could not create recordings directory. Check permissions.
If trace file can't be saved:
Warning: Failed to save trace file. Test results are still available.
--record with --quiet for automated testingdevelopment
# 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
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
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