Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
When the user says "review the design", "check the UI", or wants a comprehensive UI/UX review. 7 phases: interaction, responsiveness, accessibility. Inventory via existing-ui-audit.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Render-verification gate. A UI verdict is gated on the design-artifact verification checklist: where render capability exists, do not pass a design task without render evidence (checklist steps 1–5); where it is absent, scope the verdict to what was statically checked and say so — never "looks good" without evidence.
Use this skill when:
Do NOT use when:
fe-design skill instead)One of the following browser automation tools:
A live preview URL is required for testing.
agents/runtime/state/ui-conformance.json
(ui_conformance_probe --target <file> --reference <file>) — its per-dimension counters are the
behavioral evidence Phases 1–2 report against. Absent is absent, never clean; a dimension the host
could not exercise carries a not-applicable row with its reason rather than a zero.accessibility-auditor).:focus-visible indicator (Q6 floor, lint_design_quality).fe-design § Motion (micro-feedback ~100–200 ms;
structural open/close ~200–500 ms) — the timing source of truth; do not restate
a competing band set here. Every animated transition also carries a
prefers-reduced-motion alternative (M5 / Q4).prefers-reduced-motion block exists — the block is greppable and says
nothing. A reveal presents its content at the final state; a scrubbed
sequence presents each beat at its resting state; only decoration is
correctly removed. animation: none over a reveal leaves the content
invisible. Verdict table:
accessibility-auditor § 2.Test at four viewports:
| Viewport | Width | Device |
|---|---|---|
| Desktop | 1440px | Standard monitor |
| Tablet | 768px | iPad |
| Mobile | 375px | iPhone SE |
| Floor | 320px | Narrowest supported — the asserted floor |
The 320px row is the floor fe-design already asserts
("every layout must work on 320px width"). It is in this table because an
asserted floor outside the measured set is an assertion nobody checks; 375px
passing says nothing about 320px, which is where a two-column grid or a fixed
min-width actually breaks.
viewport_matrix rows — one per declared width, recording whether the
layout property that should change at that breakpoint did. A not-applicable row is missing evidence, not a pass.scroll_evidence artefact
(references/verification-automation.md
§ Scroll evidence) and report every sample whose asserted state and
observed disagree as a finding. An empty samples array is a recorded null,
not a pass.| Criterion | Check |
|---|---|
| 1.1.1 | All images have meaningful alt text |
| 1.3.1 | Semantic HTML (headings, landmarks, lists) |
| 1.4.3 | Color contrast ≥ 4.5:1 (text), ≥ 3:1 (large text) |
| 1.4.11 | Non-text contrast ≥ 3:1 (UI components, borders) |
| 2.1.1 | All functionality available via keyboard |
| 2.4.3 | Focus order is logical and predictable |
| 2.4.7 | Focus indicator is visible |
| 3.3.1 | Error messages identify the field and describe the error |
| 3.3.2 | Labels and instructions for form inputs |
| 4.1.2 | ARIA roles, states, and properties are correct |
APPEARANCE VERIFICATION IS MANDATORY WHEREVER APPEARANCE CAN BE AFFECTED.
THE PROBE DEMOTES THE IMAGE FROM PRIMARY EVIDENCE — IT DOES NOT MOVE THE FLOOR.
AN IMAGE IS NEVER EVIDENCE FOR HOVER, FOCUS, KEYBOARD, BREAKPOINT OR JS BEHAVIOR.
AN UNRUN APPEARANCE CHECK IS REPORTED AS UNRUN, NEVER AS PASSED.
Trigger — identical to the two capture steps it replaces, not merely as broad: Phase 0
unconditionally, Phase 2 once per width. Only what the image is evidence for narrowed.
Two jobs, and the older one comes first: (1) presence and sanity — "presence + sanity
check that nothing renders broken. Not pixel-perfect regression" — no blank frame, no
collapsed or overlapping layout, no missing region, no unstyled flash; no probe dimension
covers it, because a computed style can be correct on a node nobody can see; (2) pixel
comparison against a baseline where one exists, element-scoped, dynamic content masked. No
render capability → scope the verdict and say so per the gate at the top of this skill;
degrading is reported, never a pass. What a clean render does not answer:
references/verification-automation.md § Appearance verification.
Approval is earned, not assumed. Default to flagging.
A design review is a skeptic's pass. The default verdict for every element is "this needs to justify itself" — not "this is probably fine." Approve explicitly when you have examined the evidence and found it sound.
This posture prevents the failure of "nothing to report" reviews that miss real issues because the reviewer defaulted to charitable assumptions.
When a finding warrants a remediation recommendation, prefer in this order:
"Delete the animation" is always the first option to consider, even before suggesting a different easing curve. The same applies to decorative elements, excessive copy, and redundant UI chrome.
Load the reference file whose sections the review needs — never all of them by default:
references/review-communication.md — Before / After / Why output format · Communication principles · Report structure · Design Review Summaryreferences/verification-automation.md — Visual QA with browser automation · Async-verifier pattern (keep the main context clean) · Appearance verification (what a clean render does not answer)Read the resolved ui_authority
(contract) before reviewing. Three
fields change what a finding means:
surface_mode sets the density, hierarchy and expressiveness a reviewer
should expect. A dense operate screen is not "cramped" and a generous
persuade hero is not "wasteful".change_intent decides whether a visual-world difference is a finding at
all. Under preserve a palette or type-family delta is a defect; under
redesign it is the point.reference_maturity decides whether a difference from the reference is a
defect. A wireframe declares structure, so reproducing its gray boxes is
over-fidelity, not fidelity.QUALITY FLOORS DO NOT VARY BY SURFACE MODE.
THE Q1-Q6 FLOOR SET IS IDENTICAL IN ALL FOUR MODES.
Do not re-derive any of these fields here. This skill is a declared consumer of that object, and the contract's consumer table names it.
A 1:1 CLAIM IS PROVEN BY A COMMITTED MATRIX, NEVER BY A GREEN SUITE.
ONE ROW PER HANDOVER CHAPTER. ONE EVIDENCE KIND PER ROW. NO EMPTY CELL.
A BEHAVIOR TEST ANSWERS "DOES IT WORK", NOT "DOES IT MATCH".
This discharges design-fidelity's proof
clause. It fires when a numbered handover is the spec — chapters like
10-datenmodell-api.md … 46-roadmap-achse-randtage.md, each an abgegrenzter
contract. Such a handover is already a checklist; the failure it prevents is
reading it and never working it as one.
Build the matrix from the handover's own numbering, one row per chapter:
| Chapter | Claim it makes | Evidence | Status |
Evidence is exactly one of four kinds, and the row names which:
toHaveScreenshot on the component,
not the page. Built into Playwright via pixelmatch, so no new dependency
(playwright-testing). Mask dynamic
content (timestamps, running numbers, ids) or the baseline flakes on data
rather than on design.toHaveCSS assertion on the value the chapter names — the right kind
when the chapter states a token, a spacing step or a color rather than a
shape.not implemented is what makes the other three trustworthy.The matrix is committed, not written into a reply. A matrix that lives in a chat message dies with the session, which is the difference between a method and an artifact — and the whole reason this section exists rather than a paragraph telling a reviewer to be thorough.
The staleness trap. A new handover version ships and the baselines stay pinned to the old one, so every screenshot row passes against a reference nobody uses any more. Check the baseline timestamps against the handover's own CHANGELOG before reading a green matrix as a pass.
What the matrix does not do. It records what was compared, never that the comparison was honest — nothing in this tree reads a handover, so a row naming evidence nobody took looks exactly like one naming evidence that was. The control is that a reviewer can open it.
PASS A (JUDGEMENT) RUNS BEFORE PASS B (DETECTOR + RENDER), AND IN ISOLATION.
INLINE EXECUTION IS PERMITTED ONLY WHERE NO SPAWN PRIMITIVE EXISTS, AND THEN
LINE 1 READS `DEGRADED: single-context (<reason>)`.
THERE IS NO THIRD STATE.
Pass A — judgement. Read the surface and form a verdict without the detector output and without the render artefact. Emit an assessment id.
Pass B — detector plus render. Run lint_design_slop and read the
ui:render manifest. Emit a second assessment id.
Order is the whole point. A judgement formed after reading a detector's
findings is anchored to them: the reviewer confirms the list instead of looking
at the surface. Running A first is what keeps B's findings additive rather than
directive — the same reason
evaluator-independence forbids
pre-loading a verdict into a reviewer's prompt.
When no spawn primitive exists the two passes share one context, which means A cannot be isolated from B. That is a real degradation and it is reported, not hidden: line 1 of the output reads
DEGRADED: single-context (<reason>)
Output therefore carries either two assessment ids or that banner. Neither present is not a third state — it is an unreported degradation, and it is the failure this section exists to prevent.
Hybrid: a deterministic detector does the mechanical pattern-matching (zero token cost, no catalog reload); you do the judgment it cannot. After the structured review phases, add an explicit Anti-Slop Check section:
npx tsx node_modules/@event4u/agent-config/src/scripts/lint_design_slop.ts --dir <consumer-ui-path> --json
Each finding carries rule (e.g. slop-v1-side-stripe), catalogId
(V1), severity (P0–P3), file:line, and a message. Cite these
verbatim (rule-id + catalogId + file:line) — do not re-describe them from
the prose catalog. Findings are rebuttable presumptions: a finding the
consumer's DESIGN.md gate suppresses is already filtered out; a remaining
finding means the project has not declared the pattern as intentional.
lint_design_slop is flags, never a block (default exit 0; CI opts into
failure via --fail-on).docs/guidelines/design-antipatterns.md
for the tells that need structural/aesthetic judgment (e.g. T3 icon-tile
stack, L2 three-identical-card grid, V2 glassmorphism intent). List any that
appear, cite by entry ID, and check the override condition.state.ui_design.provided_artifact is set), a finding about a
decision the artifact makes is correct about the pattern and wrong about the
action. Keep it in the output, cite it as "matches provided spec", and
set artifact_covered: true on it — the polish gate drops those from the
round-driving set, so an unmarked finding will send a round at the user's
own design. The flag is scoped to decisions the artifact actually covers;
anything it leaves open (a state it never showed) is generative work and
keeps the full scan. Precedence + scope:
design-fidelity-mechanics
§ Provided-artifact precedence. Regression witness: daf-slop-vs-provided.For the objective quality floors (WCAG contrast, font-size, line-length,
reduced-motion, heading hierarchy, focus indicator), do NOT eyeball them —
run the accessibility-auditor checklist (Q1–Q6 in the catalog) and cite its
verdict. The review owns the subjective anti-slop judgment (Visual /
Typography / Color / Layout taste); accessibility-auditor owns the
objective floors and the WCAG audit method. Cite, don't re-derive.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
日本語の概要は準備中です。原文の説明を表示しています。
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
日本語の概要は準備中です。原文の説明を表示しています。
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
日本語の概要は準備中です。原文の説明を表示しています。
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
日本語の概要は準備中です。原文の説明を表示しています。