sweep
Conducts comprehensive frontend audits using DFS graph crawling to ensure accessibility, performance, and UI integrity across all pages.
Install this skill
Security score
The sweep skill was audited on May 25, 2026 and we found 35 security issues across 3 threat categories. Review the findings below before installing.
Categories Tested
Security Issues
Template literal with variable interpolation in command context
| 200 | console.log(`[${' '.repeat(depth)}DFS:${depth}] ${normalized}`); |
Template literal with variable interpolation in command context
| 257 | jsErrors.push(`${error.name}: ${error.message}`); |
Template literal with variable interpolation in command context
| 363 | if (!route.startsWith('/_')) seen.add(`${base}${route}`); |
Template literal with variable interpolation in command context
| 400 | selector: testId ? `[data-testid="${testId}"]` : `${tag}:has-text("${text.slice(0, 30)}")`, |
Template literal with variable interpolation in command context
| 457 | const path = `test-results/sweep/screenshots/${route}_${bp.name}.png`; |
Template literal with variable interpolation in command context
| 494 | issues.push(`OVERFLOW: ${id} extends ${Math.round(rect.right - docWidth)}px beyond viewport`); |
Template literal with variable interpolation in command context
| 516 | issues.push(`SMALL TARGET: "${text}" is ${Math.round(rect.width)}x${Math.round(rect.height)}px (min 44x44)`); |
Template literal with variable interpolation in command context
| 564 | const path = `test-results/sweep/screenshots/${route}_loading.png`; |
Template literal with variable interpolation in command context
| 601 | const path = `test-results/sweep/screenshots/${route}_empty.png`; |
Template literal with variable interpolation in command context
| 632 | const path = `test-results/sweep/screenshots/${route}_error.png`; |
Template literal with variable interpolation in command context
| 722 | const path = `test-results/sweep/screenshots/${route}_dark.png`; |
Template literal with variable interpolation in command context
| 738 | problems.push(`WHITE BG in dark mode: ${id}`); |
Template literal with variable interpolation in command context
| 749 | problems.push(`WHITE INPUT in dark mode: ${el.getAttribute('name') || el.type}`); |
Template literal with variable interpolation in command context
| 798 | const label = info.testId || info.text || `${info.tag}[${i}]`; |
Template literal with variable interpolation in command context
| 816 | issues.push(`No hover effect on clickable element: ${label}`); |
Template literal with variable interpolation in command context
| 833 | issues.push(`No visible focus indicator: ${label}`); |
Template literal with variable interpolation in command context
| 854 | issues.push(`FOCUS TRAP BROKEN: focus escapes ${label} modal`); |
Template literal with variable interpolation in command context
| 1057 | issues.push(`LCP ${Math.round(metrics.lcp)}ms > ${PERF_THRESHOLDS.LCP}ms threshold`); |
Template literal with variable interpolation in command context
| 1060 | issues.push(`FCP ${Math.round(metrics.fcp)}ms > ${PERF_THRESHOLDS.FCP}ms threshold`); |
Template literal with variable interpolation in command context
| 1063 | issues.push(`CLS ${metrics.cls.toFixed(3)} > ${PERF_THRESHOLDS.CLS} threshold`); |
Template literal with variable interpolation in command context
| 1066 | issues.push(`Total transfer ${(metrics.totalTransferSize / 1024 / 1024).toFixed(1)}MB > 3MB`); |
Template literal with variable interpolation in command context
| 1069 | issues.push(`Large resource: ${metrics.largestResource.url.split('/').pop()} = ${(metrics.largestResource.size / 1024).toFixed(0)}KB`); |
Template literal with variable interpolation in command context
| 1080 | issues.push(`Images without explicit dimensions: ${unsizedImages.join(', ')}`); |
Access to hidden dotfiles in home directory
| 1381 | npx tsx ~/.claude/skills/sweep/scripts/crawler.ts --base http://localhost:3000 |
Access to hidden dotfiles in home directory
| 1384 | npx tsx ~/.claude/skills/sweep/scripts/crawler.ts \ |
External URL reference
| 73 | - Next.js App Router → `http://localhost:3000/` |
External URL reference
| 74 | - Pages Router → `http://localhost:3000/` |
External URL reference
| 75 | - SPA → `http://localhost:5173/` (Vite default) |
External URL reference
| 81 | npx wait-on http://localhost:3000 --timeout 30000 |
External URL reference
| 166 | const BASE_URL = 'http://localhost:3000'; |
External URL reference
| 916 | url: 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.9.1/axe.min.js', |
External URL reference
| 1381 | npx tsx ~/.claude/skills/sweep/scripts/crawler.ts --base http://localhost:3000 |
External URL reference
| 1385 | --base http://localhost:3000 \ |
External URL reference
| 1399 | npx wait-on http://localhost:3000 --timeout 30000 |
External URL reference
| 1400 | npx tsx .claude/skills/sweep/scripts/crawler.ts --base http://localhost:3000 --ci --max-pages 50 |