ux-extract — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ux-extract (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Exhaustively study a reference web app and produce a reusable pattern library. Goes everywhere, captures everything, then organises it into a document another audit or build can reference.
The inverse of ux-audit:
Audits without extracts implicitly compare to "my memory of other apps" — fragile and inconsistent. Extracts turn that memory into a concrete, navigable artifact. An audit can then say: "Empty state on /app/clients shows no CTA. Reference (claude.ai) shows 3 keyboard shortcuts plus 'New chat' in the same position" instead of "feels a bit sparse".
Before starting, confirm the target is fair game:
If the target is behind a paywall or requires a trial account, ask the user whether they have legitimate access before proceeding.
| Target | Tool | Notes |
|---|---|---|
| Authenticated reference (you have an account) | Chrome MCP | Uses your logged-in session |
| Public reference (marketing pages, docs, public demos) | Playwright MCP | No login needed |
See ../ux-audit/references/browser-tools.md for commands.
Pin 1440×900 as baseline (MacBook standard). Also capture 768 and 375 for responsive patterns. Don't exceed 2000px wide.
On Retina Macs, Chrome captures at 2× the logical viewport — a 1440-wide window produces a 2880-wide PNG. Post-process after each batch so the library isn't full of oversized files:
img-process batch ./screenshots --action optimise --max-width 1440Idempotent — no-op on already-small files. Run at the end of each route's capture, or across the whole screenshots/ folder at the end of the extract. Playwright MCP users can set deviceScaleFactor: 1 in the context options and skip this step.
Decide before starting:
Narrower scope produces tighter, more useful libraries. "Whole app" is only worth it for apps you'll be building a direct analogue of.
Optional bias for capture. Examples:
If no focus is given, capture broadly.
Build the full route inventory:
/sitemap.xml, /robots.txt for discoverability/settings, /preferences, /admin that aren't in the main navRecord each route with its purpose: /settings/billing — subscription plan, payment method, invoice history.
Before deep-capture, scan the app once and list pattern types you'll document. Typical categories:
Not every app uses every category. Mark which apply.
For each route, capture exhaustively. Screenshots are cheap — err toward more.
Per meaningful element, capture:
| State | Trigger |
|---|---|
| Default | page loaded, nothing interacted with |
| Hover | mouse over a button, row, nav item |
| Focus | keyboard-focused via Tab |
| Active | button mid-click, input being typed into |
| Open | dropdown open, menu expanded |
| Closed | dropdown closed, menu collapsed |
| Expanded | accordion open, detail panel expanded |
| Collapsed | accordion closed |
| Selected | checkbox ticked, row selected, tab active |
| Loading | skeleton, spinner, pending state |
| Empty | list with no items |
| Populated | list with many items |
| Error | inline, toast, or full-page error |
| Success | post-action confirmation |
See references/capture-checklist.md for the full per-pattern checklist.
Copy the text exactly, including punctuation, ellipses, and tone:
"Start chat", "Upgrade plan", "Delete forever""e.g. [email protected]""Pressing Cmd+K opens this from anywhere"Raw copy is gold for writers and informs your app's voice.
For each interactive element, note:
? or Cmd+/ that reveals the shortcut list? Capture it.Cmd+K or similar? Capture the palette open, searching, a result selected, and an action executed.For each route, screenshot at 1440, 768, 375. Note what changes, not just "it works":
Record a GIF (Chrome MCP's gif_creator) of any animation worth documenting:
One 3-second GIF is worth a paragraph of description.
After capture, many patterns will appear on multiple pages. Deduplicate:
Keep two counts per pattern:
A pattern that appears once is rarely worth documenting unless it's unique and notable.
Write to docs/ux-extracts/<app-name>/ (or .jez/artifacts/ux-extracts/<app-name>/ if that directory exists):
docs/ux-extracts/claude-ai/
├── pattern-library.md ← main document
├── copy-corpus.md ← optional, raw copy by page (for writers)
└── screenshots/
├── 001-home-default.png
├── 002-home-hover-cta.png
├── 003-new-chat-empty.png
└── ...See references/pattern-library-template.md for the output structure.
The pattern library should be:
ux-audit checks for pattern libraries at .jez/artifacts/ux-extracts/<ref>/pattern-library.md or docs/ux-extracts/<ref>/pattern-library.md. If found, it uses them as the bar for comparison. Audit findings can then cite specific patterns:
"Empty state on /app/clients has no explanatory copy and no CTA. Reference library [claude.ai § Empty States] shows CTA + 2 example prompts in the same position."
No integration is required beyond producing the library in the expected path.
| When | Read |
|---|---|
| Building the pattern-library.md output | references/pattern-library-template.md |
| Per-pattern capture checklist (what to screenshot, what to note) | references/capture-checklist.md |
| Browser tool commands | ../ux-audit/references/browser-tools.md |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.