Agent skill
tools-ui-breakpoint-sweep
Open the app at user-specified viewport widths and systematically detect responsive layout failures (overflow/bleed, clipping, misalignment, broken reflow). Produces a screenshot-backed issue log with repro steps and fix hypotheses.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/tools-web-breakpoint
SKILL.md
UI Breakpoint Sweep
Run a deterministic responsive QA sweep across explicit viewport widths and routes. Detect containment, reflow, and overlay failures with screenshot-backed evidence.
This is a QA/diagnostic skill, not a redesign exercise.
Relationship to Other Skills
lp-design-qa: static code audit of responsive intent and token usage; no browser rendering or screenshot evidence.tools-ui-breakpoint-sweep: live rendered behavior across explicit breakpoints with screenshot-backed defects.meta-user-test: broad crawl/site-health audit; use it when you need full-site coverage beyond selected routes.lp-launch-qa: pre-launch gate; consume this sweep as responsive evidence for conversion/performance readiness.lp-do-build: execute fixes after this sweep report is approved.
Required First Question
If widths are not already provided, ask exactly:
Which breakpoint widths (in px) should I test?
Example: 320, 375, 430, 768, 1024, 1280
Do not start the sweep until widths are confirmed.
Inputs
| Input | Required | Notes |
|---|---|---|
| Breakpoints (px) | Yes | Comma-separated widths, e.g. 320,375,430,768,1024,1280 |
| App entry URL | Yes | Local or deployed URL |
| Routes/screens to cover | No (recommended) | If absent, discover primary navigation routes plus at least one dense page |
| Auth scope or test account | No | If login is required and no credentials exist, run no-auth scope and document the gap |
| Theme/mode/locale | No | e.g. light/dark, locale, long-text stress mode |
If the operator only provides widths, proceed with sensible defaults for optional inputs and explicitly document assumptions.
Defaults (only when operator does not specify)
- Breakpoints:
320, 375, 390, 414, 480, 600, 768, 820, 1024, 1280, 1440 - Viewport height:
900 - Routes:
- app entry route
- primary same-origin navigation targets discovered from visible navigation links
- at least one dense route (forms/tables/modals/drawers/filters)
- Theme/locale: app default
If app URL is missing, ask: What URL should I sweep?
Operating Mode
AUDIT + REPORT (read-only against product code)
Allowed:
- Open app in browser automation and set viewport widths
- Navigate routes and interact with menu/modal/drawer/accordion/dropdown states
- Capture full-page and focused screenshots
- Write report artifact and screenshot files
Not allowed:
- Code or CSS changes unless explicitly requested after reporting
- Subjective redesign commentary without reproducible defects
- Marking issues without evidence
Output Contract
Write one report artifact plus linked screenshots:
- Report:
docs/audits/breakpoint-sweeps/YYYY-MM-DD-<slug>/breakpoint-sweep-report.md - Screenshots:
docs/audits/breakpoint-sweeps/YYYY-MM-DD-<slug>/screenshots/
Use .claude/skills/tools-web-breakpoint/modules/report-template.md for required report structure.
Every issue must include: breakpoint, route, repro steps, expected vs actual, severity, and screenshot link(s).
Workflow
0) Write QA Inventory (Required Gate)
Before any browser is opened, write a QA inventory. Do not start the sweep until this inventory is complete.
Build the inventory from three sources:
- User requirements — what was explicitly requested or described as the test scope.
- Features being tested — every meaningful user-facing control, mode switch, or interactive behaviour visible on the routes under test.
- Claims to sign off — every user-visible claim you intend to make in the final report.
For each item, note the intended functional check and the visual state where the claim must be verified.
Add at least 2 exploratory / off-happy-path scenarios — interactions not on the scripted path that could expose fragile behaviour (e.g. resizing the viewport mid-interaction, rapidly toggling a drawer, submitting an empty form, tabbing through all focusable controls).
The inventory is the shared coverage list for both the Functional QA Pass and the Visual QA Pass. Copy it into the report's ## QA Inventory section.
1) Intake and Sweep Plan
- Confirm breakpoint list and URL.
- Resolve route list:
- Use operator-provided routes when available.
- Otherwise discover primary navigation routes and add at least one dense route.
- Record assumptions (auth, theme, locale, unavailable routes).
- Prepare artifact directory and screenshot naming convention.
2) Execute Breakpoint Matrix
For each width W:
- Set viewport to
W x 900.- For mobile breakpoints (W ≤ 480px): also configure the browser context with
isMobile: trueandhasTouch: trueto enable realistic touch-event simulation and mobile user-agent behaviour. These flags must be set in the browser context options, not only via viewport size.
- For mobile breakpoints (W ≤ 480px): also configure the browser context with
- For each target route, run the Functional QA Pass first, then the Visual QA Pass.
Functional QA Pass
Use real user controls for all checks — keyboard, mouse click, touch events (at W ≤ 480px). Browser evaluate() calls may inspect or stage state but do not count as functional signoff input.
- Navigate and wait for ready state (
network idleor app-ready selector). - Run overflow/reflow checks (see §4 Detection Heuristics).
- Trigger interactive states using real input:
- mobile nav/hamburger — open and close via tap/click
- one modal/drawer/popover — open, interact, verify close control is reachable, close
- one accordion/dropdown — cycle through states: open → closed → open
- key forms/tables/cards — attempt the primary action or submission
- For reversible controls or stateful toggles in the QA inventory: test the full cycle (initial state → changed state → returned to initial).
- Work through every item in the QA inventory. If a new control or state is discovered, add it to the inventory before continuing.
Visual QA Pass
Run this as a separate, explicit pass after the Functional QA Pass is complete.
- Capture baseline full-page screenshot.
- Inspect the initial viewport before scrolling — confirm the core content and primary CTA are clearly visible without clipping.
- Inspect all required visible regions (nav, hero/content area, primary CTA, modals/drawers in settled state, footer).
- Inspect at least one in-transition state (drawer opening, modal appearing) when motion is part of the experience.
- Judge aesthetic quality as well as correctness — the UI should feel intentional and coherent at this breakpoint.
- Capture focused screenshot(s) for any detected issue, in addition to the full-page baseline.
3) Failure Taxonomy
Assess each route+width against:
- A. Viewport overflow (page-level)
- Unexpected horizontal scroll
- Visible elements extending beyond viewport bounds
- B. Parent/container overflow (component-level)
- Child bleed beyond parent bounds
- Unintentional clipping from
overflow: hidden|clip - Text truncation that destroys meaning
- C. Reflow correctness
- Columns failing to stack
- Fixed widths blocking responsive behavior
- Wrapping that makes controls unusable
- Misalignment/overlap jitter
- D. Fixed layers/overlays
- Sticky header/footer obscures content
- Modal/drawer exceeds viewport with no usable internal scroll
- Off-screen drawer or unreachable close controls
- E. Density/long-content stress
- Long titles/translations/numbers/tags pushing controls off-screen or collapsing hierarchy
4) Detection Heuristics (practical pass/fail rules)
Flag an issue if any condition is true:
documentElement.scrollWidth > documentElement.clientWidth + 2(unexpected horizontal scroll)- Visible element has
rect.right > viewportWidth + 4orrect.left < -4 - Parent with
overflow: hidden|clippartially hides meaningful child content without intentional truncation behavior - Critical controls (primary CTA, submit, nav close, modal close) are clipped/off-screen or require horizontal scrolling
- Sticky/fixed layers overlap first actionable content and prevent normal interaction
- Modal/drawer cannot be fully navigated or closed on the current viewport
Per-region viewport fit check (required before signoff):
For each critical region — navigation bar, primary CTA, modal or drawer close button, and form submit button — run getBoundingClientRect() and verify:
rect.right ≤ viewportWidthandrect.left ≥ 0(no horizontal bleed)rect.bottom ≤ viewportHeight(visible without scroll, for above-the-fold regions)
Document-level scroll metrics alone (scrollWidth > clientWidth) are not sufficient. Internal panes, fixed-height shells, and hidden-overflow containers can clip required UI while page-level scroll checks still pass.
Noise-control rules (do not over-report):
- Ignore <=2px overflow caused by rounding/subpixel rendering.
- Do not flag intentional horizontal containers (
overflow-x-auto) when content remains reachable and semantics stay clear. - Ignore hidden/off-canvas elements not intended to be visible and not intercepting interaction.
5) Severity Model
- S1 Blocker: core action impossible (submit, checkout, navigation, close modal)
- S2 Major: primary content/control impaired or misleading; workaround exists but UX is materially degraded
- S3 Minor: cosmetic/alignment issue with preserved usability
5.5) Exploratory Pass
After the scripted breakpoint matrix is complete, perform an unscripted exploratory pass on each route before writing the report.
- Allow ~30–90 seconds of free-form interaction: resize the viewport mid-session, navigate via keyboard only, tap in unexpected areas, attempt edge-case inputs (empty forms, long strings, rapid toggling).
- If a new control, state, or failure mode is discovered: add it to the QA inventory and include it in the report.
- The exploratory pass is not scored separately — findings feed into the main Issues list with the same severity model (§5).
6) Report and Evidence
For each issue, include:
- Breakpoint width
- Route/screen
- Component or section (best effort)
- Repro steps
- Expected vs actual
- Severity (
S1|S2|S3) - Screenshot links (full-page + focused when needed)
- Fix hypothesis (likely CSS cause + quick direction)
Typical fix directions to mention when applicable:
- missing
min-w-0on flex/grid children - incorrect
overflowcontainment on component shells - hard-coded widths replacing responsive constraints (
w-full,max-w-*) - missing wrap rules (
flex-wrap, text wrap/word-break) - overlay sizing/scroll fixes (
max-h-[dvh], internal scroll region) - use shared design-system containment helpers where relevant (
overflowContainmentClass(...)inpackages/design-system/src/utils/style/overflowContainment.ts)
7) Completion Message
Return:
- breakpoints tested
- routes tested
- issue totals by severity
- path to
breakpoint-sweep-report.md - explicit assumptions and uncovered scope gaps
- Negative confirmation — for each defect class, state whether it was checked and not found:
- A. Viewport overflow (unexpected horizontal scroll at page level)
- B. Container overflow (component-level clipping or bleed beyond parent bounds)
- C. Reflow correctness (columns not stacking, fixed widths, wrapping failures, alignment jitter)
- D. Fixed layers / overlays (sticky headers obscuring content, unreachable modal/drawer close)
- E. Density / long-content stress (long text, dense tables, or tag lists pushing controls off-screen)
If no issues are found, explicitly state:
No responsive layout failures detected across tested breakpoint/route matrix. Defect classes A–E all checked; no failures found.
- If issues were found and fixed via
/lp-do-build: re-run this sweep to confirm findings are resolved before routing totools-refactor.
Integration
- Upstream:
lp-design-qa(optional trigger — breakpoint-sweep is invoked after lp-design-qa flags responsive or layout concerns);lp-do-build(direct invocation for pre-launch QA pass). - Downstream:
tools-refactor(layout and overflow findings feed the refactor entry criteria);lp-do-build(issues returned as structured findings for fix tasks). - Loop position: S9C (Parallel Sweep) — runs alongside
tools-ui-contrast-sweepafter UI build and static QA, before refactor. - Note:
lp-responsive-qa(under construction, seedocs/plans/lp-responsive-qa-skill/) is a complementary rendered-screenshot skill for browser-based responsive validation. It will sit betweenlp-do-buildandlp-design-qaonce shipped.tools-ui-breakpoint-sweepremains the static layout audit tool.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?