ux-audit
Skill18 starsChanged 4 months agoMITView on GitHub
Suite roll-up — fan out to the default UX auditors (usability, accessibility, cuj) against one target, with web performance available opt-in, normalize all findings into the shared .ux/audits contract, and produce one combined roll-up ranked by priority (P0-P3), with no ship call. Use for "full UX audit", "audit everything", "ux-audit", "go/no-go UX verdict".
28 other projects use a version of this.
Adopted by
Most recently taken up by
- undark-ai/Meta-Ads-OStheir own version, first seen Nov 15, 2026
- lobehub/lobehubtheir own version, first seen Nov 15, 2026
- AhmedAbdelfattah0/AI-Skillstheir own version, first seen Nov 12, 2026
- thensls/nsls-builder-toolkittheir own version, first seen Nov 8, 2026
- naman10parikh/pennytheir own version, first seen Nov 8, 2026
- naman10parikh/wikimemtheir own version, first seen Nov 8, 2026
Used with
Projects with it also use ecosystem-reference, fractal-delegation and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
naman10parikhSkillecosystem-reference
Quick-access directory of Claude Code ecosystem repos, skills, plugins, MCPs, and patterns. Use when improving the harness.
Also in 5 projects that use this
naman10parikhSkillfractal-delegation
Also in 5 projects that use this
KirchliveSkillskill-routing
Decides which of the installed skills a task needs and loads them before the work starts. This skill should be used at the beginning of any multi-step task — build, fix, refactor, migrate, review, plan, release, research, write, design, video — and again at every phase change, after context compaction, and when work moves into a different part of the codebase. Use it for requests like "let's build X", "fix this bug", "refactor Y", "plan the migration", "review this", and also when the user asks which skill applies, why a skill did not fire, or asks to check what is available.
Also in 5 projects that use this
sublimotionSkillagent-runtime
Launch and manage detached agent runs on EKS via the agent-runner CLI. Use when the user says "launch an agent run", "agent runtime", "agent-runner", "run this spec on the cluster", "check run status", "agent run logs", or "stop a run". Do NOT use for writing the agent-runner code itself (edit the sibling ../agent-runner repo), Terraform of the foundation (use terraform-automation), or GPU serving deployments (use infra-deployer).
Also in 5 projects that use this
GoZippySkillrepo-scout
Also in 5 projects that use this
BenjaminGSkillharness-review
Turn one PR's review comments into harness fixes — classify each cause by the most solid place it can live (codebase, lint, rules, skill), then draft the fixes in a separate PR.
Also in 5 projects that use this
- +6 more from naman10parikh
Other versions28 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 28
- lobehub/lobe-chat★ 86ksame name
- lobehub/lobehub★ 86ksame name
- thedesignproject/agent-skills★ 101same name
- drvoss/everything-copilot-cli★ 49same name
- EliaAlberti/ux-audit-skill★ 17same name
- kevin-burns/claude-skills★ 11same name
- naman10parikh/agentgrid★ 9same name
- naman10parikh/wikimem★ 8same name
- AhmedAbdelfattah0/AI-Skills★ 4same name
- paulunemoon/ux-audit-skill★ 4same name
18 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository6 other files it gives its agents.
- AGENTS.mdAGENTS.md
- docs/agents.mdAGENTS.md
- audit-cujSkill
- render-reportSkill
- spec-cujSkill
- usability-auditSkill
The file
We split this skill into the rules it gives an agent
9 rules. 0 are common, 3 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 25 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
Run the auditor suite against one target and merge the results.
- Very specific: line 51
When it is not opted into, record it as skipped with the reason "web performance is opt-in.
- Distinctive: line 72
Before the fan-out, not inside it: Every auditor shares this browser session, so a lazy handoff would interrupt the user partway through a …
- Very specific: line 96
Fan out: Run each selected auditor against the same target/--scope:
- Very specific: line 132
Append the index: Add one .ux/audits/index.md row per auditor run (append-only), exactly as a single-auditor run does.
- Very specific: line 135
Write the roll-up: Create .ux/audits/rollup-<YYYYMMDD>-<HHMMSS>.md with this frontmatter:
- Distinctive: line 225
Findings only: No auditor in the roll-up edits host application code.
- Distinctive: line 227
Ask first: before starting a dev server, navigating a browser, or installing anything (including a missing wrapped skill — offer, don't …
- Very specific: line 238
Every member report validates, the roll-up validates under --rollup, and the index validates under --index.
“Common” is measured: kept by at least 6 in 10 of the 25 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
UX Audit — suite roll-up
Run the auditor suite against one target and merge the results. By default this fans out to
usability, accessibility, and cuj; web performance is opt-in (add --only web-performance or
--all). This is the fan-out the
report contract was built for: every
auditor writes the same schema into .ux/audits/, so their reports are comparable and can be
rolled up into a single verdict.
Two native auditors plus two wrapped from web-quality-skills
(the same-author companion to agent-skills, a coherent suite of web-quality checks):
| Auditor | Source | Frameworks | Report auditor |
| Usability | native skills/usability-audit | Nielsen / Shneiderman / AI / NPCIS | usability |
| Accessibility | wrap web-quality-skills:accessibility | WCAG 2.2 | accessibility |
| Web performance | wrap web-quality-skills:performance (+ core-web-vitals) (opt-in — excluded from the default bundle; add via --only web-performance or --all) | Core Web Vitals | web-performance |
| Critical user journeys | native skills/audit-cuj (conditional — needs .ux/cujs/) | the host's own CUJ files | cuj |
Extensible:
web-quality-skillsalso shipsseoandbest-practices; add them as future suite members the same way (register their frameworks inscripts/validate_report.py).
Inputs
target— a URL (preferred; a11y and web-perf need a render) or a repo path. Omit to infer from the running dev server / repo.--scope— narrow to a flow or area, shared by all auditors.--only <list>— run a subset, e.g.--only usability,accessibility. Default (no--only): usability, accessibility, and cuj — web performance is excluded (opt-in). Namingweb-performancein--onlyruns it.--all— run every available auditor, including web performance. If both--onlyand--allare given,--onlywins (the explicit subset is honored;--allis ignored).--mode— passed through to auditors that support it (usability).
Workflow
- Discover available auditors. Usability is always available (native). For
accessibility and web performance, check whether the wrapping skills
(
web-quality-skills:accessibility,web-quality-skills:performance) are installed. Web performance is also opt-in: even when installed, it runs only when named in--onlyor when--allis passed — it is excluded from the default bundle (its metrics are typically dev-mode / localhost lab numbers, not production Core Web Vitals). When it is not opted into, record it as skipped with the reason"web performance is opt-in; run with --only web-performance or --all", exactly as the CUJ skip is disclosed. The CUJ auditor (audit-cuj) is native but conditional: it runs only when the host has authored journeys —.ux/cujs/exists and is non-empty. Skip any auditor that is unavailable — a wrapped skill not installed,.ux/cujs/absent/empty, or web performance not opted into — and record it as skipped with a note giving the reason in the roll-up (for CUJ:"no CUJs authored; run /ux-spec"). A missing, skipped, or opt-in-not-requested auditor must never read as a clean pass. Honor--onlyand--all. Auth pre-flight — once, before any auditor runs. Applies only when this run will actually drive a browser:
targetis a URL (or a reachable running app) and the resolved mode is live or hybrid. A repo-path target, or--mode static, has no page to navigate and no session to establish — skip this step entirely and record nothing. Do not start a dev server or open a browser just to run the probe; that is the ask-first boundary below, and a static run is not owed a browser.Otherwise: navigate to
target(honoring--scope) and check for a login wall. If one stands there, run the auth handoff now:auth-handoff.md— observe the wall verbatim, ask once, the user signs in, re-observe to confirm the session holds.Before the fan-out, not inside it. Every auditor shares this browser session, so a lazy handoff would interrupt the user partway through a multi-auditor run — after minutes of work — and could ask more than once as each auditor hit the same wall independently. One probe, one interruption, before any auditor starts.
Outcome Then Not applicable (repo-path target, or static mode) Proceed. Nothing to record. No wall Proceed. Nothing to record. Handoff succeeded Proceed. Every auditor inherits the session, native and wrapped alike. Declined Proceed unauthenticated — do not skip the run. Auditors cover what is reachable and disclose the gated screens as coverage gaps. No attended browser surface Same as declined, with cause handoff unavailable — no attended browser surface. Not a decline; nobody was asked.Disclose it in the roll-up. Carry the outcome into the roll-up summary as an
Access:line, so the priority distribution is never read as covering the whole product when it covered only the public half. Record the rung, never the account.A note on the wrapped auditors.
web-quality-skills:accessibilityand:performanceinherit the session but do not know this suite's capture rules, so their own artifacts may carry account data. That is why the artifact posture (auth-handoff.md§6) recommends ignoring.ux/audits/wholesale rather than assets-only, and why the recommendation is made here — at auth time, before any auditor writes anything.- Fan out. Run each selected auditor against the same
target/--scope:- Usability — invoke the native
usability-auditskill; it already writes a contract report. - Accessibility — invoke
web-quality-skills:accessibility; capture its WCAG findings. - Web performance (only when opted in via
--only web-performanceor--all) — invokeweb-quality-skills:performance(andcore-web-vitals); capture its findings, respecting its metric-honesty rule (unmeasured = potential, never fabricated). - Critical user journeys — invoke the native
audit-cujskill; it replays the host's.ux/cujs/and already writes a contract report. It honors its own static-vs-live honesty rule (a static run cannot produce a verified pass).
- Usability — invoke the native
- Normalize into the shared contract. For each wrapped auditor, write a
contract-conforming report at
.ux/audits/<auditor>-<YYYYMMDD>-<HHMMSS>.md— same frontmatter schema, body layout, and appendix. Map each tool's output onto theP0–P3ladder — these tools never produced a severity in the first place; they produce conformance failures and measured bands, which are statements about task impact:- Accessibility (WCAG): a blocker on a core flow, or a Level A name-role-value
failure that leaves no route through →
P0; other Level A, and Level AA (e.g. 1.4.3 contrast) →P1; minor/AAA or edge →P2; cosmetic →P3. - Web performance: a Core Web Vital in the "poor" band (measured) →
P1; "needs improvement" →P2; a structural anti-pattern with only potential impact →P2–P3, labeled potential per the metric-honesty rule. - Severity still has to be rated, not copied from the priority: apply the contract's three factors to what the tool found. A contrast failure on every page is persistent and frequent even when a workaround exists.
- Omit non-problems entirely (severity 0), same as usability.
Set
auditorandframeworksper the table above; carry the tool's evidence (screenshots,file:line, measured metrics) into the Evidence field. The native auditors (usability,cuj) already emit contract reports — no external remapping. CUJ carries one exception the roll-up must respect:total: 0is a pass (every journey verified clean), not "found nothing". Read the CUJ report's executive-summary counts andframeworkslist to tell a clean pass from a run that verified nothing (frameworks: [cuj-contract]alone signals the latter), and never fold a skipped CUJ run into the passed column.
- Accessibility (WCAG): a blocker on a core flow, or a Level A name-role-value
failure that leaves no route through →
- Append the index. Add one
.ux/audits/index.mdrow per auditor run (append-only), exactly as a single-auditor run does. Write the roll-up. Create
.ux/audits/rollup-<YYYYMMDD>-<HHMMSS>.mdwith this frontmatter:--- rollup: true # REQUIRED — see below date: 2026-11-12T02:12:05Z # ISO-8601, UTC, from the runtime clock target: http://localhost:3000 scope: "whole app — default bundle (usability, accessibility, cuj)" auditors_run: [usability, accessibility, cuj] auditors_skipped: - "web-performance — opt-in; run with --only web-performance or --all" priorities: # the P0-P3 totals across every auditor that ran P0: 0 P1: 1 P2: 3 P3: 1 ---rollup: trueis load-bearing and its absence is silent.render_report_html.pybranches on that one key to pick the dashboard view. Omit it and the file still renders — as an ordinary report, minus the headline banner that names the highest-priority finding and warns when auditors were skipped. Nothing fails; the warning simply is not there. Step 7's--rollupcheck exists to make that loud.There is no
verdict:key — see the no-ship-call rule below.The body holds:
- The priority distribution — per-auditor counts plus a total row, e.g.
1 x P0 - 4 x P1 - 7 x P2 - 2 x P3. This is the headline. - The highest-priority finding, named. A count says how much; it does not say what broke. Quote the worst finding with its auditor and link, so the reader sees the thing itself and can disagree with its rank.
- A merged issues list ordered by priority across all auditors.
- Coverage — which auditors ran, which were skipped and why (a CUJ run skipped for
want of
.ux/cujs/; web performance skipped when not opted into, with its opt-in reason), and theAccess:rung from step 2.
No overall go/no-go verdict, and this is deliberate. Whether a release ships needs release context the suite does not have — deadlines, risk appetite, what the alternative costs — and inventing one is exactly what Boundaries forbids. The roll-up answers what do I fix first; the ship call stays with the human.
An empty distribution is not automatically a pass. A skipped CUJ run, a web-performance run not opted into, or an uninstalled auditor is disclosed next to the counts, never folded into a clean read:
0 x P0across one auditor of four says almost nothing about the product. The same discriminator the CUJ reports use (a verified pass is not a run that verified nothing) applies to the suite as a whole. Link to each report.- The priority distribution — per-auditor counts plus a total row, e.g.
Self-check. Validate each artifact with
scripts/validate_report.py— three modes, and the roll-up needs its own:python3 scripts/validate_report.py .ux/audits/<auditor>-*.md # the member reports python3 scripts/validate_report.py --rollup .ux/audits/rollup-*.md python3 scripts/validate_report.py --index .ux/audits/index.mdA roll-up is not a report — it carries no
auditor,mode,frameworksor findings — so passing it to the bare form reports a page of irrelevant errors. Use--rollup, which checks what a roll-up actually promises: therollup: truekey, theprioritiestotals, the auditors ran/skipped lists, the two required sections, and the absence of a reinstatedverdict.Then confirm the safety invariant with
scripts/audit_safety.py<host-repo>. It checks both halves of the invariant (SPEC §5.2) and exits 0 only if both hold: nothing changed outside.ux/audits/, and the writes you just made inside it were observed — it prints them. Exit 1 with "no writes were observed" means the run produced nothing; that is a real failure for an auditor, not a formality, and it is the only signal you get once.ux/audits/is gitignored andgit statushas gone quiet.Render the HTML companions. Generate a self-contained HTML view for every member report, the roll-up dashboard (with its priority distribution and per-auditor matrix linking to each member's
.html), and the index landing page:python3 scripts/render_report_html.py .ux/audits/*.md python3 scripts/render_report_html.py --index .ux/audits/index.mdEach
.htmlis a derived view of its Markdown, written under.ux/audits/— the safety invariant holds. (Also available on demand via/ux-review.)
Boundaries
- Findings only. No auditor in the roll-up edits host application code.
- Never write outside
.ux/audits/in the host repo — the suite-wide safety invariant. - Ask first before starting a dev server, navigating a browser, or installing anything (including a missing wrapped skill — offer, don't auto-install).
- Never fabricate, and honor each wrapped auditor's own honesty rules (usability's render-vs-source; web performance's metric-honesty).
Exit criteria (done when)
- Each selected, available auditor produced a contract-valid report under
.ux/audits/, with one appended index row apiece. - A
rollup-<timestamp>.mdexists with the priority distribution, the highest-priority finding named, skipped auditors (with reasons), merged issues, and no ship call. - Every member report validates, the roll-up validates under
--rollup, and the index validates under--index;audit_safety.pyexits 0 on both halves: nothing changed outside.ux/audits/, and the reports this run wrote inside it were observed.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

