Tests essential user journeys like purchase flows and logins from project config using navigate/verify/input steps with personas. Ensures critical paths pass before deployments.
From user-testing-agentnpx claudepluginhub ncklrs/claude-chrome-user-testing --plugin user-testing-agentThis skill uses the workspace's default tool permissions.
Guides AI-assisted editing of real video footage: transcribe/plan cuts with Claude, execute via FFmpeg bash scripts, augment with Remotion/ElevenLabs/fal.ai, polish in Descript/CapCut.
Ingests video/audio from files, URLs, RTSP, desktop; indexes/searches moments with timestamps/clips; transcodes/edits timelines (subtitles/overlays/dubbing); generates assets and live alerts.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
Test must-work user journeys defined in project configuration. Critical paths are essential flows that must always function correctly.
A critical path is a user journey that:
| Site Type | Critical Paths |
|---|---|
| E-commerce | Purchase flow, Account creation, Cart |
| SaaS | Signup, Login, Core feature usage |
| Content | Navigation, Search, Article viewing |
| Banking | Login, Transfer, Balance check |
{
"paths": [
{
"name": "string (required)",
"description": "string (required)",
"persona": "persona-id (required)",
"priority": "critical|high|medium|low (optional, default: high)",
"timeout": "number in seconds (optional, default: 120)",
"steps": [
{
"action": "navigate|task|verify|wait|input",
"...action-specific fields"
}
],
"onFailure": "continue|stop (optional, default: continue)"
}
]
}
Navigate to a URL path.
{
"action": "navigate",
"to": "/path",
"waitFor": "load|networkidle (optional)"
}
Perform a task using the persona's behavior.
{
"action": "task",
"do": "description of task to perform",
"timeout": 30
}
Verify something exists or is true.
// Verify element exists
{ "action": "verify", "element": "description of element" }
// Verify text appears
{ "action": "verify", "text": "exact text to find" }
// Verify URL matches
{ "action": "verify", "url": "/expected-path" }
// Verify URL contains
{ "action": "verify", "urlContains": "confirmation" }
Wait for a condition.
// Wait for seconds
{ "action": "wait", "seconds": 2 }
// Wait for element
{ "action": "wait", "for": "element description" }
// Wait for navigation
{ "action": "wait", "for": "page load" }
Enter specific data into a field.
{
"action": "input",
"field": "field description or selector",
"value": "value to enter"
}
function executePath(path, baseUrl):
results = { steps: [], status: 'pending' }
loadPersona(path.persona)
startTime = now()
for step in path.steps:
stepResult = executeStep(step, baseUrl)
results.steps.append(stepResult)
if stepResult.status == 'fail':
results.status = 'fail'
results.failedAt = step
captureScreenshot()
if path.onFailure == 'stop':
break
else:
return results
results.status = 'pass'
results.duration = now() - startTime
return results
function executeStep(step, baseUrl):
switch step.action:
case 'navigate':
navigate(baseUrl + step.to)
return { status: 'pass' }
case 'task':
success = performTaskAsPersona(step.do)
return { status: success ? 'pass' : 'fail' }
case 'verify':
found = verifyCondition(step)
return { status: found ? 'pass' : 'fail' }
case 'wait':
waitForCondition(step)
return { status: 'pass' }
case 'input':
fillField(step.field, step.value)
return { status: 'pass' }
| Priority | On Failure | Report Level |
|---|---|---|
| critical | Major alert | CRITICAL |
| high | Alert | ERROR |
| medium | Warning | WARNING |
| low | Note | INFO |
const pathReport = {
summary: {
total: 3,
passed: 2,
failed: 1,
skipped: 0
},
results: [
{
name: 'purchase-flow',
status: 'pass',
duration: 45,
steps: [
{ action: 'navigate', status: 'pass', duration: 2 },
{ action: 'task', status: 'pass', duration: 15 },
// ...
]
},
{
name: 'password-reset',
status: 'fail',
duration: 15,
failedAt: { step: 4, action: 'task', error: 'Button not clickable' },
screenshot: 'path-password-reset-fail.png'
}
],
actionRequired: [
{
priority: 'high',
path: 'password-reset',
issue: 'Form submission broken',
recommendation: 'Check submit button handler'
}
]
};
When --fail-fast is enabled:
All pass + no critical failures = SUCCESS
Any critical failure = FAILURE
Only non-critical failures = WARNING (could be configurable)
{
"paths": [
{
"name": "guest-purchase",
"description": "Guest checkout flow",
"persona": "impulse-buyer",
"priority": "critical",
"steps": [
{ "action": "navigate", "to": "/" },
{ "action": "task", "do": "find a product" },
{ "action": "task", "do": "add to cart" },
{ "action": "task", "do": "go to cart" },
{ "action": "task", "do": "proceed to checkout" },
{ "action": "task", "do": "fill shipping info" },
{ "action": "verify", "element": "payment form" }
]
},
{
"name": "product-search",
"description": "Search for products",
"persona": "comparison-shopper",
"priority": "high",
"steps": [
{ "action": "navigate", "to": "/" },
{ "action": "task", "do": "search for a product" },
{ "action": "verify", "element": "search results" },
{ "action": "task", "do": "click a result" },
{ "action": "verify", "element": "product details" }
]
}
]
}
{
"paths": [
{
"name": "signup-to-dashboard",
"description": "New user onboarding",
"persona": "genz-digital-native",
"priority": "critical",
"steps": [
{ "action": "navigate", "to": "/signup" },
{ "action": "task", "do": "complete registration" },
{ "action": "verify", "urlContains": "dashboard" },
{ "action": "verify", "element": "welcome message" }
]
},
{
"name": "login-flow",
"description": "Existing user login",
"persona": "busy-executive",
"priority": "critical",
"steps": [
{ "action": "navigate", "to": "/login" },
{ "action": "input", "field": "email", "value": "test@example.com" },
{ "action": "input", "field": "password", "value": "testpass123" },
{ "action": "task", "do": "submit login" },
{ "action": "verify", "element": "dashboard or main app" }
]
}
]
}