From copiatore
Analyze and fix website UI/UX/a11y/performance. Quick scan, deep audit with Teams, autodebug loop, or iterative dev companion.
How this skill is triggered — by the user, by Claude, or both
Slash command
/copiatore:copiatoreThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
```
A finding without a measured value AND visual verification in the screenshot is not a finding. No exceptions.
".hero h1 has font-size 14px — below 16px minimum" = finding. "The typography could be improved" = noise. If you can't point to a pixel value, a CSS selector, and a screenshot region, you haven't found anything — you're guessing.
When invoked WITHOUT a specific command (e.g., just /copiatore or a generic request like "analizza questo sito"), present this intake using AskUserQuestion:
Question: "Cosa vuoi fare?"
Header: "Mode"
Option 1: "Analisi design (Recommended)"
Description: "Audit completo: screenshot, design review con score, a11y, performance. Ti dico cosa non va e come fixare."
Option 2: "Clona un sito"
Description: "Estraggo struttura, token, asset e ricostruisco il sito in HTML/CSS. Sezione per sezione, pixel-perfect."
Option 3: "Debug e fix"
Description: "Trovo i problemi, li fixo nel codice, verifico con visual diff. Loop autonomo fino a convergenza."
Option 4: "Dev companion"
Description: "Ti seguo mentre sviluppi. Feedback continuo su ogni cambio: visual diff, regressioni, suggerimenti."
IF "Analisi design" was selected, ask the analysis depth:
Question: "Che tipo di analisi?"
Header: "Profondità"
Option 1: "Rapida — technical + aesthetic sintetico (~2 min) (Recommended)"
Description: "Score tecnico + valutazione estetica inline. Veloce, copre tutto l'essenziale."
Option 2: "Approfondita — design critic completo (~5 min)"
Description: "Score tecnico + Design Critic agent con analisi estetica strutturata su 7 dimensioni."
Then ask for the URL:
Question: "Su quale sito lavoriamo?"
Header: "URL"
(free text — the user types the URL)
Route to the appropriate mode:
If the user gives a specific command (e.g., /copiatore scan https://example.com), skip onboarding and execute directly.
Before ANY analysis mode, gather site context. This is not the analysis — it's the data you need to analyze intelligently.
After copiatore_navigate, immediately run:
copiatore_extract — raw design data (colors, typography, spacing, layout)copiatore_screenshot — above-fold visual. Read it with the Read tool. If you skip visual inspection, the analysis is unreliable.copiatore_evaluate expression: JSON.stringify({ viewport: document.querySelector('meta[name=viewport]')?.content, generator: document.querySelector('meta[name=generator]')?.content, next: !!document.getElementById('__next'), nuxt: !!window.__NUXT__, react: !!document.querySelector('[data-reactroot]'), angular: !!document.querySelector('[ng-version]') })From the extract + screenshot + framework check, classify:
| Signal | How to detect | Impact on analysis |
|---|---|---|
| Site type | URL patterns, content density, component mix | Marketing → visual impact priority. Dashboard → information density. E-commerce → conversion flow. Blog → readability. |
| Framework | Meta generator, __next, __NUXT__, data-reactroot, ng-version | SPA → check hydration artifacts. SSR → check FCP. Static → check caching. |
| Design system maturity | CSS variable count, off_grid_ratio, type scale_ratio from extract | Level 0-1 → flag everything. Level 3-4 → flag deviations from THEIR system, not generic rules. |
| Auth wall | Login form visible, redirect to /login, cookie consent overlays | Behind auth → tools see login page, not app. AskUserQuestion: provide session or analyze login page only. |
| Dark mode | prefers-color-scheme in stylesheets, .dark / [data-theme] toggles | Test BOTH modes. Contrast bugs hide in dark mode. |
| Responsive setup | Viewport meta present, breakpoint count from stylesheets | No viewport meta = CRITICAL. Zero breakpoints = mobile-hostile. |
| Heavy assets | Canvas/WebGL, <video>, image count >20, total asset weight | WebGL → copiatore_fps_monitor mandatory. Heavy images → LCP focus. |
Output Step 0 as a classification table before proceeding. Every subsequent step references this context.
If copiatore_extract fails → see Error Recovery Protocol below.
If auth wall detected → AskUserQuestion before continuing.
After the technical design_review (Step 1), evaluate the aesthetic quality of the site. This catches what data extraction misses: a site can score 85/100 technically while looking like a generic template.
Two modes (selected during onboarding):
Look at the screenshots. For each of 7 aspects, score 1-10 with one line of evidence. Not the full Design Critic process — an honest judgment in 30 seconds.
FIRST: look at the above-fold screenshot for 2 seconds. What does it communicate? What would you remember? Write one sentence.
THEN evaluate:
Average = Aesthetic Score (1-10).
Divergence flag: IF aesthetic < 6 AND technical > 75, flag the gap explicitly:
"Technically solid but aesthetically weak — the site works but doesn't impress."
Spawn the design-qa agent as a subagent. Pass it:
The agent runs its full 4-phase methodology and returns a structured aesthetic assessment. See .claude/agents/design-qa.md for the complete process.
Every analysis report shows BOTH scores side by side:
DESIGN SCORE
───────────────────────────────
Technical [0-100] Grade: [A-F]
Aesthetic [1-10] [⚠ if < 6]
───────────────────────────────
[If divergence: "Technical score reflects correctness (grid, a11y,
type scale). Aesthetic score reflects visual quality (depth, craft,
originality). This site is correct but not beautiful."]
The two scores are independent — neither overrides the other. Both appear in the report. The user decides which to act on.
After EVERY analysis report (scan, audit, fix, compare), the agent MUST ask the user what to do next. Never deliver a report and stop.
Question: "Cosa vuoi fare?"
Header: "Next"
Option 1: "Fix i problemi trovati" [Recommended if critical/major findings exist]
Description: "Applico le fix nel codice, verifico con visual diff."
Option 2: "Migliora stile/estetica" [Recommended if aesthetic < 6]
Description: "Ti propongo 3 interventi per alzare l'impatto visivo."
Option 3: "Approfondisci un'area specifica"
Description: "Scegli: a11y, performance, mobile, una sezione, un componente."
Option 4: "Fatto così"
Description: "Il report è sufficiente, non serve altro."
Recommendation logic:
All analysis MUST evaluate against the design criteria in .claude/design-criteria.md. This includes:
Every scan, audit, and fix MUST apply these criteria. No exceptions.
Additionally, use .claude/design-references.md for industry-standard benchmarks:
Judgment heuristics for design analysis. Not every pattern applies to every site — scan all and apply those that illuminate blind spots in the current analysis.
gap: 16px but screenshot shows uneven spacing → the visual is authoritative. CSS may be overridden by child margins, flex-grow, or percentage widths. Always verify extracted data against the screenshot.font-family: system-ui, -apple-system as primary (not fallback) → intentional choice, not "missing custom font."scale_ratio of 1.24 when Major Third is 1.25 → this IS Major Third with rounding. Tolerance: ±0.03 from named ratios before flagging "no scale."suggestion, not major.After Step 0 classifies the site, route the analysis emphasis:
Marketing / Landing Page
E-commerce / Product Page
copiatore_functional_test on add-to-cart + checkout flowDashboard / SaaS App
copiatore_emulateBlog / Content Site
Portfolio / Creative
copiatore_fps_monitor + copiatore_gesture for scroll interactionsWeb App (forms, flows)
copiatore_functional_test on all forms + copiatore_user_journeyEvery mode listed in the Commands table starts with copiatore_navigate. Immediately after navigation, run Step 0 before proceeding with mode-specific steps. Exceptions:
tokens — pure extraction, no analysis judgment neededbench — HTTP-level test, no design context neededexport-tokens — format conversion, no analysisParse the user's command after /copiatore:
| Command | Mode | Description |
|---|---|---|
scan <url> | Quick | Single-agent snapshot + visual analysis |
audit <url> | Deep | Team of 4 specialist agents |
fix <url> | Autodebug | Deep audit + apply fixes + verify loop |
dev <url> | Iterative | Continuous feedback while building |
tokens <url> | Extract | Design tokens only (CSS variables) |
compare <a> <b> | Compare | Side-by-side design comparison |
test <url> | Functional | Automated form/CTA testing |
heal <url> [--full] | Autonomous | Design QA agent fix loop |
clone <url> | Clone | Replicate site visual design into HTML/CSS |
a11y-axe <url> | A11y | axe-core powered accessibility audit |
perf <url> | Performance | Lighthouse + Web Vitals + PageSpeed audit |
bench <url> | Benchmark | HTTP load test with autocannon |
export-tokens <url> | Export | W3C DTCG tokens + Style Dictionary multi-platform |
create | Create | Build a new site from scratch with selected style |
Read skills/copiatore/methods/analysis.md with the Read tool, then follow the ObserveProcess phases. For scan mode, skip Phase 2 mobile snapshot (desktop only) and use inline aesthetic assessment.
copiatore_navigate to the URLcopiatore_interactive_map — discover forms, CTAs, orphan inputscopiatore_functional_test mode:auto — smart-fill, click CTAs, capture transitionscopiatore_test_report save:true — persist results, check regressionsRead skills/copiatore/methods/heal.md with the Read tool. /copiatore heal <url> uses checkpoint mode (AskUserQuestion for ambiguous choices). /copiatore heal <url> --full uses full-auto mode (zero interruptions, always picks lowest-risk root-cause fix).
Read skills/copiatore/methods/analysis.md with the Read tool, then follow all ObserveProcess phases. Include mobile snapshot in Phase 2. Use deep aesthetic assessment (spawn design-qa agent).
copiatore_emulate device: "iPhone 15 Pro"copiatore_emulate device: "iPad Pro"copiatore_emulate device: "Pixel 5"Or use copiatore_responsive_audit with viewport array.
Read skills/copiatore/methods/heal.md with the Read tool, then follow the ConvergeProcess phases. Before healing, run a full analysis (methods/analysis.md) to establish the finding list. Apply Fix Alternatives protocol for every critical/major finding.
Continuous feedback loop during development:
copiatore_navigate → copiatore_snapshot → copiatore_screenshot "baseline" → quick analysiscopiatore_visual_diff baseline vs N → targeted analysis on changed areaPrinciples: fast feedback (not exhaustive reports), always screenshots + visual diffs, specific values ("4px off grid" not "alignment issues"), track regressions.
copiatore_navigate → copiatore_design_tokensRead skills/copiatore/methods/clone.md with the Read tool, then follow the ReplicateProcess phases. The key principle: every CSS property must use extracted CSS variables, never hardcoded values.
Read skills/copiatore/methods/create.md with the Read tool, then follow the BuildProcess phases. Requires a style module from .claude/design-styles/ — the onboarding intake will ask the user to select one.
copiatore_navigate to the URLcopiatore_a11y_axe standard:wcag21aa → zero-false-positive violationscopiatore_a11y_extract (headings, landmarks, form labels)copiatore_navigate → copiatore_lighthouse categories: performance,accessibility,best-practicescopiatore_web_vitals interact:true wait_ms:5000 — real LCP, INP, CLS, TTFB, FCPcopiatore_pagespeed strategy: mobile — CrUX field datacopiatore_fps_monitor duration:3000 for GPU loadcopiatore_navigate to the URL (to resolve the final URL)copiatore_http_benchmark url: finalUrl, duration: 10, connections: 10copiatore_navigate → copiatore_export_tokens format: "all"copiatore_extract → data_acopiatore_extract → data_bWhen a Copiatore tool fails, follow this protocol. Do NOT silently skip the step — either recover or report the gap.
| Failure | Likely Cause | Recovery |
|---|---|---|
copiatore_navigate timeout | Slow site, SSR delay, infinite redirect | Retry with wait_until: "domcontentloaded". Still fails → verify URL, ask user. |
copiatore_screenshot blank/white | SPA hydration pending, canvas-only, overlay blocking | Wait 2s, retry. Still blank → copiatore_evaluate to check document.readyState and visible element count. |
copiatore_extract empty data | Canvas-only site, iframe-embedded, heavy JS rendering | Try copiatore_evaluate with custom query. Report: "Extraction limited — site uses [canvas/iframe]. Manual inspection from screenshots only." |
| CDP session error | Navigation during CDP call, page crash, cross-origin frame | Retry once. Persistent → skip CDP-dependent metrics (FPS, GPU layers). Note gap in output. |
copiatore_visual_diff fails | Different viewport sizes, page changed between screenshots | Ensure both screenshots use identical viewport. Re-navigate if page changed. |
copiatore_a11y_axe timeout | Very large DOM, heavy JS | Use copiatore_a11y_extract instead (lighter). Note: "axe unavailable, structural analysis only." |
| Any tool returns partial data | Resource constraints, incomplete page load | Use what you have. Mark affected metrics as [partial] in output. |
If Step 0 (Site Context Audit) fails completely → you cannot trust subsequent analysis. Stop:
STATUS: BLOCKED
Cause: Site context audit failed — [what failed]
Action needed: [what the user should check]
If a non-critical tool fails mid-analysis → continue with remaining tools, mark the gap:
⚠ [tool_name] unavailable: [reason]. Analysis excludes [what's missing].
Never silently drop a tool failure. Every gap must appear in the final output.
Before outputting final results, verify every item. If ANY check fails, go back and fix before outputting.
.hero-cta has 8px padding — Fitts minimum is 48px target" is correct.copiatore_emulate iPhone 15 Pro.design-criteria.md. If fewer → I'm not looking hard enough.For every CRITICAL or MAJOR finding in fix/heal mode, present alternatives before applying. Never auto-commit to the first solution.
CRITICAL TYPOGRAPHY — Body text 13px, below 16px minimum
Element: `.content p`
Current: font-size: 13px
Target: ≥16px
Alternatives:
A) Local fix — `.content p { font-size: 16px }`. Effort: 1min. Risk: none. Fixes symptom only.
B) Systemic fix — Update CSS variable `--body-size` from 13px to 16px. Effort: 2min. Risk: cascading to other elements using the variable. Fixes root cause.
C) Scale fix — Set base to 16px, recalculate heading scale at 1.25 ratio. Effort: 10min. Risk: medium (many elements change). Prevents recurrence.
Recommend B: fixes root cause with minimal blast radius — all elements using --body-size get corrected together.
AskUserQuestion format: Start with "Recommend [LETTER]: [one-line reason]" then list all options as A) ... B) ... C) .... One finding per question. Never batch.
For MINOR/SUGGESTION findings: apply the obvious fix directly, no alternatives needed.
heal mode (--full): In full-auto mode, always pick the option with lowest risk + fixes root cause. Log the choice in output so the user can review.
When a finding is ambiguous — you're not sure if something is intentional or a bug — present structured options via AskUserQuestion. Do NOT assume.
Question format:
"Recommend [LETTER]: [one-line reason]. [description of what you found]"
A) [interpretation 1 + action]
B) [interpretation 2 + action]
C) [investigate further before deciding]
When to trigger:
When NOT to trigger (just report directly):
In scan mode: No AskUserQuestion — speed matters. Report findings, flag ambiguous ones as [AMBIGUOUS] so the user knows.
In audit/fix/heal mode: Use AskUserQuestion for ambiguous findings.
Every analysis output — not just clone — ends with this block:
STATUS: DONE | DONE_WITH_CONCERNS | BLOCKED | NEEDS_CONTEXT
| Status | Condition |
|---|---|
DONE | Analysis complete, all tools ran, all criteria evaluated |
DONE_WITH_CONCERNS | Analysis complete but some tools failed or data was partial — concerns listed |
BLOCKED | Cannot produce reliable analysis — critical tool failure or auth wall |
NEEDS_CONTEXT | Missing information from user (e.g., which page to analyze, target audience, brand guidelines) |
───────────────────────────────
STATUS: [DONE | DONE_WITH_CONCERNS | BLOCKED | NEEDS_CONTEXT]
VERDICT: [SHIP | FIX FIRST | REDESIGN]
Site type: [classification from Step 0]
Findings: [N] critical, [N] major, [N] minor, [N] suggestions
Coverage: [which criteria sections were evaluated]
NOT analyzed: [what was intentionally excluded and why]
Gaps: [tools that failed or data that's missing]
Self-check: PASS
───────────────────────────────
Open questions (if any):
- [assumption made without user confirmation + what changes if wrong]
- [ambiguous finding left unresolved + which interpretation was chosen]
Analysis Boundary ("NOT analyzed"): This is NOT tool failures (that's "Gaps"). This is intentional exclusions based on mode and scope. Examples:
/copiatore test for forms)"/copiatore perf for performance)"Making exclusions explicit prevents the user from assuming everything was checked.
Open Questions: Track every assumption you made without user confirmation. If the user didn't answer an AskUserQuestion, or you had to assume an interpretation of an ambiguous finding, list it here. Never silently default to an interpretation — declare it.
If Self-Check did not pass, do not output. Fix first.
Every analysis ends with a clear, non-ambiguous verdict. STATUS tells you what happened. VERDICT tells you what to do.
| Verdict | Condition | Meaning |
|---|---|---|
| SHIP | Zero critical, ≤2 major, design is solid | Safe to go live. Minor issues can be fixed post-launch. |
| FIX FIRST | ≥1 critical OR >2 major, but all are fixable | Do not launch until critical/major findings are resolved. |
| REDESIGN | Fundamental structural problems — broken hierarchy, no responsive, layout collapse, a11y wall | Individual fixes won't save this. Needs architectural design work. |
Verdict goes in the output footer, after STATUS. The verdict is based on findings, not opinion. If findings say SHIP but your gut says something is off → add it as a concern in DONE_WITH_CONCERNS, don't inflate the verdict.
Consistency across modes makes results comparable and actionable.
Every individual finding follows this structure:
[SEVERITY] [CATEGORY] — [one-line problem statement]
Element: [CSS selector or screenshot region description]
Current: [what it is now, with measured values]
Target: [what it should be, with specific values]
Fix: [concrete CSS/HTML change]
Criteria: [which design-criteria.md section this violates]
Severity: CRITICAL / MAJOR / MINOR / SUGGESTION
Category: typography / color / spacing / layout / a11y / performance / interaction / hierarchy
DESIGN SCORE
───────────────────────────────
Technical (8 dimensions, weighted)
Visual Structure [0-10]
Typography [0-10] ×1.5
Color & Contrast [0-10] ×1.2
Spacing & Grid [0-10]
Hierarchy [0-10]
Accessibility [0-10] ×2.0
Performance [0-10] ×0.8
───────────────────────────────
Technical Total [0-100] Grade: [A-F]
Aesthetic (7 dimensions, from Step 1.5)
Depth · Rhythm · Palette · Craft
Originality · Resonance · Coherence
───────────────────────────────
Aesthetic Total [1-10] [⚠ if < 6]
───────────────────────────────
Grade Cap: ANY critical finding → maximum grade C regardless of score
Divergence: Technical > 75 AND Aesthetic < 6 → flag explicitly
The grade cap prevents a site from scoring 88/100 (A) when it has a critical accessibility failure. One critical = max C.
clone_report status + visual diff score + section-by-section completenessnpx claudepluginhub alemusica/copiatore --plugin copiatoreProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.