better-accessibility
Reviews and fixes keyboard and focus behavior, ARIA, accessible names, forms, screen-reader…
Reviews a branch, pull request or uncommitted change for the interface problems it introduced or regressed, across accessibility, layout, writing, typography, color and UI.
$ npx -y skills add jakubkrehel/skills --skill interface-review --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/interface-reviewContext preview
The summary Claude sees to decide when to auto-load this skill.
Reviews a branch, pull request or uncommitted change for the interface problems it introduced or regressed, across accessibility, layout, writing, typography, color and UI.
name: interface-review disable-model-invocation: true description: Reviews a branch, pull request or uncommitted change for the interface problems it introduced or regressed, across accessibility, layout, writing, typography, color and UI.
This skill reviews a change rather than a screen. It resolves the scope, expands the changed files to the surfaces they affect, reads both sides of the diff and classifies every finding.
It owns the scope, the classification and the change-scoped report. Domain rules belong to the `better-*` skills. Severity, consolidation, coverage, the cap and the verdict belong to `better-interface`, which this skill hands the review to.
Correctness, tests, security and performance belong to the project's general code review. Name such a concern once, point at that review and drop it.
The author is asking "did I make this worse?". Report what the change caused and stay mostly quiet about what it merely touched. Three pre-existing findings is a courtesy; thirty is a different review and one nobody asked for.
Read the whole diff before forming an opinion of it. A skimmed diff produces findings about code the next hunk already fixed.
The whole invocation is the target, so `/interface-review pr 482` reviews pull request 482. [Scope resolution](scope-resolution.md) holds the accepted targets and how each resolves.
With no target supplied, resolve in this order and stop at the first match:
1. `HEAD` is ahead of `git merge-base origin/<default-branch> HEAD`. Review that range **plus** any uncommitted changes, stating the commit count and the uncommitted file count separately. 2. The working tree is dirty. Review the uncommitted changes. 3. Neither. There is no change to review, so follow **With no change, ask rather than invent one**.
Record the base commit of the resolved range as `$BASE` and name it in the scope block. Every command in this skill and its references uses it.
Exclude lockfiles, snapshots, generated output, vendored code and binaries per [Excluded paths](scope-resolution.md#excluded-paths), and name what you excluded. If nothing survives the exclusions, treat it as no change.
A clean tree with nothing ahead of the merge base means there is no change to review. Never fall back to `HEAD~1..HEAD` on your own. The last commit is whatever happened to land, often a merge or someone else's work.
Gather the facts in [Nothing to review](scope-resolution.md#nothing-to-review), state them, then offer these routes and wait:
Where exclusions emptied the scope, name the excluded files in the offer. Never report a review of nothing as `Approve`.
A changed file is evidence, not the review subject. Its **blast radius** is the set of surfaces it renders in; review those.
Expand one hop by default, to the direct importers and callers. Expand a second hop only for design tokens, theme values and shared primitives, where one line reaches the whole product.
Review at most five consumers in total across both hops, ordered by [the rule in Scope resolution](scope-resolution.md#expanding-to-consumers). State how many you did not expand, since an unstated cutoff reads as completeness.
Regressions are invisible in the post-change state. Read the `-` side of every hunk against [Removed signals](removed-signals.md).
A signal is a lead, not a finding. A removal is a regression only when nothing in the change replaces it, and the domain skill owns that judgement. Route each unmatched removal to its owner, report only what that skill confirms and status it `Regression`.
Give every finding one status:
Status by cause, not by location. A finding a changed line causes is `Introduced` or `Regression` wherever it surfaces, including an untouched consumer of a changed token. A finding the change neither created nor worsened is `Pre-existing`, even three lines from a hunk.
To check whether a line predates the change, blame the reviewed range. A `^` prefix marks a line unchanged since the base:
git blame -L <line>,<line> "$BASE"..<head-ref> -- path/to/file
For uncommitted work, drop the range. A line marked `Not Committed Yet` or blamed on a commit inside `$BASE..HEAD` belongs to the change.
Read the pull request title and body, the linked issue and the commit messages, then review whether the interface delivers what they claim.
This is how you find the **incomplete** change, which a surface review misses because it inspects only the states that exist. Look for the absent ones:
Do not report scope creep. Whether a change does too much is
A collection of agent skills that help you build great interfaces.
Reviews and fixes keyboard and focus behavior, ARIA, accessible names, forms, screen-reader…
Helps you build and check a color system for your project. It generates palettes, names…
Combines all of the `better-*` skills into a single review across accessibility, layout,…
Helps with grouping, alignment, reading order, responsive structure and room for translated…
Sets and reviews how text renders in your product, from the type scale and spacing to font…
Polishes the surfaces, icons and motion in your project with exact values for border radius,…