Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add ncklrs/claude-chrome-user-testing --skill session-recordergit clone --depth 1 https://github.com/ncklrs/claude-chrome-user-testingWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/ncklrs/claude-chrome-user-testing/session-recorder)<a href="https://agentmods.dev/skills/ncklrs/claude-chrome-user-testing/session-recorder"><img src="https://agentmods.dev/badge/skills/ncklrs/claude-chrome-user-testing/session-recorder.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.01294 |
| Opus 5 | $0.00000 | $0.00647 |
| Sonnet 5 | $0.00000 | $0.00259 |
| Haiku 4.5 | $0.00000 | $0.00129 |
Grade A, and why
session-recorder scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 208 lines — stays where its author put it; the contents beside it link to each section on GitHub.
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
--recordflag 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 at each action
- DOM Snapshots: Full page state at each step
- Network Requests: All HTTP requests/responses
- Console Logs: JavaScript console output
- Action Timeline: Timestamped sequence of all interactions
Implementation
Starting a Recording
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';
}
Stopping a Recording
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}`;
}
Trace Filename Convention
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.zip
Generating Filename
const 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`;
};
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago First seen · 208 lines · 0 tokens per session scan A 975d74bf0f96
session-recorder is a skill published in the GitHub repository ncklrs/claude-chrome-user-testing (19 stars, last pushed 8mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 1,294 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
browser-inspection-workflow
Coordinate rendered behavior and state evidence.
cross-browser-qa
Verify browser-engine compatibility.
hatch3r-browser-verify
Opt-in browser verification skill — spec-run-first Playwright verification (assertions execute in the runner, agent reads only failures), axe-core a11y audits, toHaveScreenshot() regression diffs, E2E test scaffolds, and snapshot-mode exploratory driving. Default ON for UI-affecting agent invocations; disable globally…
tauri-pilot
Inspect, interact with, and test a running Tauri v2 app via CLI. Communicates over Unix socket using JSON-RPC 2.0. Use when testing UI, automating interactions, or debugging a Tauri app.
form-validation-scan
Probe the forms on a page for validation gaps — missing required-field enforcement, no client-side validation, accepts malformed input, and absent error messaging. Reports per-field findings. Playwright MCP only, no signup.
broken-link-scan
Find broken links on any website. Crawls the page, checks every link for 404s, redirects, and timeouts. Reports dead links with their location. Uses Playwright MCP only — no signup.