Records browser testing sessions as Playwright traces capturing screenshots, DOM snapshots, network requests, and console logs for replay and analysis. Triggers on --record flag.
From user-testing-agentnpx claudepluginhub ncklrs/claude-chrome-user-testing --plugin user-testing-agentThis skill uses the workspace's default tool permissions.
Designs 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.
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 testing