Not in the top 1,000 by GitHub stars
EthanY33/atelier
Claude Code plugin, listed in awesome-claude-code. One brand.json drives tokens, social cards, icons, images, video and two audits across 8 skills. Also a CLI and a GitHub Action.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
plugins/atelier/skills/accessibility-design-audit/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 848320d77ae1
No earlier version was observed for comparison.
plugins/atelier/skills/brand-asset-pipeline/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 848320d77ae1
No earlier version was observed for comparison.
plugins/atelier/skills/brand-memory/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 848320d77ae1
No earlier version was observed for comparison.
plugins/atelier/skills/design-token-sync/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 848320d77ae1
No earlier version was observed for comparison.
plugins/atelier/skills/html-to-video/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 848320d77ae1
No earlier version was observed for comparison.
plugins/atelier/skills/og-card-generator/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 848320d77ae1
No earlier version was observed for comparison.
plugins/atelier/skills/responsive-image-pipeline/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 848320d77ae1
No earlier version was observed for comparison.
plugins/atelier/skills/runtime-ux-audit/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 848320d77ae1
No earlier version was observed for comparison.
Verified commit 848320d77ae1d2218a80d1b97be5804191651e82
git clone --filter=blob:none --no-checkout https://github.com/EthanY33/atelier.git .hotskills/ethany33-atelier && git -C .hotskills/ethany33-atelier checkout --detach 848320d77ae1d2218a80d1b97be5804191651e82
# Copy each selected skill directory from .hotskills/ethany33-atelier into .claude/skills/<skill-name>/Heat
5.0- Star growth, last 7 daysNot available
- Star growth, last 24 hoursNot available
- Rank movement, last 7 daysNot available
- Commits, last 30 daysNot available
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekNot available
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- accessibility-design-audit
plugins/atelier/skills/accessibility-design-audit - brand-asset-pipeline
plugins/atelier/skills/brand-asset-pipeline - brand-memory
plugins/atelier/skills/brand-memory - design-token-sync
plugins/atelier/skills/design-token-sync - html-to-video
plugins/atelier/skills/html-to-video - og-card-generator
plugins/atelier/skills/og-card-generator - responsive-image-pipeline
plugins/atelier/skills/responsive-image-pipeline - runtime-ux-audit
plugins/atelier/skills/runtime-ux-audit
How it works
accessibility-design-audit
When your agent uses it
WCAG 2.1 A and AA accessibility audit of a URL or local HTML file with axe-core in headless Chromium. Writes a markdown report grouped by impact plus raw JSON and exits 1 on critical or serious violations, so it doubles as a CI gate. Use after design changes (colors, contrast, typography, forms, modals), before shipping a page, or when asked to check a11y, WCAG, ADA or Section 508.
What it loads into context
Frontmatter
102 tokensAlways available to the agent
SKILL.md
1,199 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Run
- Options
- Output
- Exit codes
- Notes
Scripts executed separately
../../bin/atelier../../bin/atelier../../lib/doctor.mjs../../lib/preflight.mjs../../scripts/run-demo.mjsindex.mjs
Files
../../../../.claude-plugin/marketplace.jsonasset885 bytes../../.claude-plugin/plugin.jsonasset632 bytes../../bin/atelierruns4,934 bytes../../bin/atelierruns4,934 bytes../../lib/doctor.mjsruns5,389 bytes../../lib/preflight.mjsruns11,525 bytes../../scripts/run-demo.mjsruns7,983 bytesSKILL.mdcore4,525 bytesSKILL.mdcore4,525 bytesSKILL.mdcore4,525 bytesSKILL.mdcore4,525 bytesindex.mjsruns20,677 bytes
Read SKILL.md
## Run
```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y https://staging.example.com
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y dist/index.html --out a11y-report
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y http://localhost:3000 --wait-for "#app main" --tags wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22aa
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y --help
```
JS API, for scripts that need the violation objects. The module path is passed as an argument and turned into a file URL, so the same line works on Windows, macOS and Linux:
```bash
node --input-type=module -e "const { pathToFileURL } = await import('node:url'); const m = await import(pathToFileURL(process.argv[1]).href); const { violations, reportPath } = await m.auditPage({ url: 'dist/index.html', outDir: 'a11y-report' }); console.log(violations.critical.length, violations.serious.length, reportPath);" "${CLAUDE_SKILL_DIR}/index.mjs"
```View the complete source on GitHubbrand-asset-pipeline
When your agent uses it
Render one SVG logo mark into a PNG brand asset pack (favicons 16 to 180 px, apple-touch-icon and Android Chrome icons, Open Graph, Twitter and LinkedIn covers, Steam store capsules). With --root it takes the background color, mark path and Steam target from .atelier/brand.json. Use when bootstrapping site icons, rebranding, or making social or Steam store art.
What it loads into context
Frontmatter
92 tokensAlways available to the agent
SKILL.md
1,716 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Run
- Options
- Output
- Exit codes
- Notes
Scripts executed separately
../../bin/atelier../../bin/atelier../../lib/doctor.mjs../../lib/preflight.mjs../../scripts/run-demo.mjsindex.mjs
Files
../../bin/atelierruns4,934 bytes../../bin/atelierruns4,934 bytes../../lib/doctor.mjsruns5,389 bytes../../lib/preflight.mjsruns11,525 bytes../../scripts/run-demo.mjsruns7,983 bytesSKILL.mdcore6,450 bytesSKILL.mdcore6,450 bytesSKILL.mdcore6,450 bytesindex.mjsruns27,279 bytes
Read SKILL.md
## Run
```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" assets brand/mark.svg --out public/brand
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" assets brand/mark.svg --out public/brand --targets favicons,app-icons --bg "#0b1020"
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" assets --root . --out public/brand
```
When the project has `.atelier/brand.json`, pass `--root .` so its `palette.bg`, `logos.mark` and `deploy.stores` apply.
JS API (the module path is passed as an argument and turned into a file URL, so the import works on Windows, macOS and Linux):
```bash
node --input-type=module -e "const { pathToFileURL } = await import('node:url'); const m = await import(pathToFileURL(process.argv[1]).href); const r = await m.generateAssets({ markSvg: 'brand/mark.svg', outDir: 'public/brand', projectRoot: process.cwd() }); console.log(r.targets.join(','), r.backgroundColor, r.files.length);" "${CLAUDE_SKILL_DIR}/index.mjs"View the complete source on GitHubbrand-memory
When your agent uses it
Create, read, update, validate and audit the project's brand file, .atelier/brand.json (studio, product, voice, hex palette, font stacks, logos, social handles, deploy target, motion and surface tokens). Use when starting a design workflow, running /brand-init, /brand-get, /brand-set or /brand-audit, changing a brand color or font, or checking brand.json against its schema.
What it loads into context
Frontmatter
92 tokensAlways available to the agent
SKILL.md
1,654 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Run
- Options
- Output
- Exit codes
- Notes
Scripts executed separately
../../bin/atelier../../bin/atelier../../lib/doctor.mjs../../lib/preflight.mjs../../scripts/run-demo.mjsindex.mjs
Files
../../bin/atelierruns4,934 bytes../../bin/atelierruns4,934 bytes../../lib/doctor.mjsruns5,389 bytes../../lib/preflight.mjsruns11,525 bytes../../schemas/brand.schema.jsonasset5,669 bytes../../scripts/run-demo.mjsruns7,983 bytesSKILL.mdcore6,177 bytesSKILL.mdcore6,177 bytesSKILL.mdcore6,177 bytesindex.mjsruns25,920 bytes
Read SKILL.md
Skills such as design-token-sync and og-card-generator read this file. Every command works on `<root>/.atelier/brand.json`, with `--root` defaulting to the current directory.
## Run
```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" brand init --studio goneIdle --product TideWane \
--voice "atmospheric, mysterious" --bg "#110f1b" --accent "#67e8f9" \
--body-font "Silkscreen, 'Courier New', monospace" --display-font "Space Grotesk, sans-serif" \
--deploy cloudflare-pages
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" brand get palette.bg --raw
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" brand set palette.terra "#e07a5f"
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" brand set brand.voice "calm, precise"
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" brand audit
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" brand validateView the complete source on GitHubdesign-token-sync
When your agent uses it
Generate design tokens from the atelier brand file (.atelier/brand.json): CSS custom properties, a Tailwind theme config, typed JS constants (tokens.js + tokens.d.ts) and a Figma Variables REST API body. Use when creating or regenerating design tokens, CSS variables, a Tailwind config, TypeScript color constants or Figma variables after brand colors or fonts change.
What it loads into context
Frontmatter
84 tokensAlways available to the agent
SKILL.md
1,393 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Run
- Options
- Output
- Exit codes
- Notes
Scripts executed separately
../../bin/atelier../../bin/atelier../../lib/doctor.mjs../../lib/preflight.mjs../../scripts/run-demo.mjsemitters/css.mjsemitters/dts.mjsemitters/figma.mjsemitters/js.mjsemitters/shared.mjsemitters/tailwind.mjsindex.mjs
Files
../../bin/atelierruns4,934 bytes../../bin/atelierruns4,934 bytes../../lib/doctor.mjsruns5,389 bytes../../lib/preflight.mjsruns11,525 bytes../../scripts/run-demo.mjsruns7,983 bytesSKILL.mdcore5,342 bytesSKILL.mdcore5,342 bytesSKILL.mdcore5,342 bytesemitters/css.mjsruns1,133 bytesemitters/dts.mjsruns1,895 bytesemitters/figma.mjsruns2,767 bytesemitters/js.mjsruns2,355 bytesemitters/shared.mjsruns12,131 bytesemitters/tailwind.mjsruns1,783 bytesindex.mjsruns7,116 bytes
Read SKILL.md
One-way: reads `.atelier/brand.json` (see brand-memory), writes token files. It never reads its outputs back and never calls Figma.
## Run
```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" tokens # project root = cwd, writes dist/tokens/
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" tokens --root ./site --out src/styles/tokens --targets css,dts
```
JS API. The module path is passed as an argument and turned into a file URL, so the import works with Windows, macOS and Linux paths:
```bash
node --input-type=module -e "const { pathToFileURL } = await import('node:url'); const m = await import(pathToFileURL(process.argv[1]).href); const files = await m.syncTokens({ projectRoot: '.', outDir: 'dist/tokens', targets: ['css', 'tailwind'] }); for (const f of files) console.log(f);" "${CLAUDE_SKILL_DIR}/index.mjs"
```View the complete source on GitHubhtml-to-video
When your agent uses it
Record an HTML page, local .html file or URL as an MP4 (H.264) or WebM (VP9) video with frame-exact timing (virtual clock), optional muxed audio and a JPG poster. Use for product or game trailers, animated demo clips, screencasts of a local dev server, changelog or social videos, and turning CSS/JS animations into a video or GIF.
What it loads into context
Frontmatter
92 tokensAlways available to the agent
SKILL.md
2,411 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Run
- Options
- Output
- Exit codes
- Notes
Scripts executed separately
../../bin/atelier../../bin/atelier../../lib/doctor.mjs../../lib/preflight.mjs../../scripts/run-demo.mjsindex.mjs
Files
../../bin/atelierruns4,934 bytes../../bin/atelierruns4,934 bytes../../lib/doctor.mjsruns5,389 bytes../../lib/preflight.mjsruns11,525 bytes../../scripts/run-demo.mjsruns7,983 bytesSKILL.mdcore8,798 bytesSKILL.mdcore8,798 bytesSKILL.mdcore8,798 bytesSKILL.mdcore8,798 bytesSKILL.mdcore8,798 bytesindex.mjsruns29,131 bytes
Read SKILL.md
Needs ffmpeg on PATH and the Playwright Chromium build that matches the plugin's pinned Playwright (`npx playwright@<version> install chromium`; installing the plugin does not download a browser). Run `node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" doctor` first: it checks both and prints the exact install command. A bare `npx playwright install chromium` uses the project's own or the latest Playwright and can install a Chromium the plugin cannot use.
## Run
```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" video http://localhost:5173/trailer.html dist/trailer.mp4 10 --width 1920 --height 1080
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" video demo/page.html dist/demo.webm --fps 60 --poster
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" video demo/page.html dist/trailer.mp4 12 --audio score.wav
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" video --help
```
JS API, for an audio track generated in code (`audioSource`). This one writes a short 880 Hz beep at the start of every second; replace the sample loop with your own track:
```bashView the complete source on GitHubog-card-generator
When your agent uses it
Render 1200x630 Open Graph and Twitter card PNGs, one per page, from .atelier/brand.json colors, fonts, logo and studio name; single card from flags or a batch from a pages.json manifest. Use when adding og:image or twitter:image meta tags, setting up social link previews for a site or blog, or regenerating cards after a brand color or font change.
What it loads into context
Frontmatter
88 tokensAlways available to the agent
SKILL.md
1,471 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Run
- Options
- Output
- Exit codes
- Notes
Scripts executed separately
../../bin/atelier../../bin/atelier../../lib/doctor.mjs../../lib/preflight.mjs../../scripts/run-demo.mjs../brand-memory/index.mjsindex.mjs
Files
../../bin/atelierruns4,934 bytes../../bin/atelierruns4,934 bytes../../lib/doctor.mjsruns5,389 bytes../../lib/preflight.mjsruns11,525 bytes../../scripts/run-demo.mjsruns7,983 bytes../brand-memory/index.mjsruns25,920 bytesSKILL.mdcore5,523 bytesSKILL.mdcore5,523 bytesSKILL.mdcore5,523 bytesindex.mjsruns29,057 bytestemplate.htmlasset7,667 bytes
Read SKILL.md
## Run
Run from the project root that holds `.atelier/brand.json` (or pass `--project <dir>`):
```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" og pages.json public/og
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" og --title "TideWane" --subtitle "A deep-sea idle dungeon crawler" --slug home --out public/og
```
`pages.json` is `{ "pages": [ { "slug": "home", "title": "...", "subtitle": "..." } ] }` or a bare array of pages.
JS API (the module path goes in as an argument and is loaded through `pathToFileURL`, so the import also works with Windows paths; importing it does not start the CLI):
```bashView the complete source on GitHubresponsive-image-pipeline
When your agent uses it
Resize PNG/JPG/WebP images into AVIF and WebP srcset variants (EXIF-rotated, never upscaled), a fallback <img> file and a base64 LQIP placeholder, then print a copy-paste <picture> snippet with truthful srcset widths. Cached per source. Use for site images, hero art, gallery screenshots, srcset, page-weight or LCP work, or reprocessing after swapping an asset.
What it loads into context
Frontmatter
100 tokensAlways available to the agent
SKILL.md
1,585 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Run
- Options
- Output
- Exit codes
- Notes
Scripts executed separately
../../bin/atelier../../bin/atelier../../lib/doctor.mjs../../lib/preflight.mjs../../scripts/run-demo.mjsindex.mjs
Files
../../bin/atelierruns4,934 bytes../../bin/atelierruns4,934 bytes../../lib/doctor.mjsruns5,389 bytes../../lib/preflight.mjsruns11,525 bytes../../scripts/run-demo.mjsruns7,983 bytesSKILL.mdcore5,766 bytesSKILL.mdcore5,766 bytesSKILL.mdcore5,766 bytesSKILL.mdcore5,766 bytesSKILL.mdcore5,766 bytesSKILL.mdcore5,766 bytesSKILL.mdcore5,766 bytesSKILL.mdcore5,766 bytesindex.mjsruns31,762 bytes
Read SKILL.md
## Run
CLI (one or more files, `file://` URLs, or folders; folders are not recursive):
```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" images src/hero.jpg --out public/img --alt "Harbor at dusk" --base-url /img/ --loading eager
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" images src/gallery --out public/img/gallery --widths 480,960 --json
```
On Windows in Git Bash, put `MSYS_NO_PATHCONV=1` in front of `node` when you pass `--base-url /img/`. Otherwise Git Bash rewrites `/img/` to `C:/Program Files/Git/img/` and the CLI stops with a usage error. With it set, give file paths as relative or `C:/...` paths, not `/c/...`. Do not use `//img/`: that is a protocol-relative URL.
JS API (the module path is passed as an argument, so the import works on Windows, macOS and Linux):
```bashView the complete source on GitHubruntime-ux-audit
When your agent uses it
Audit a URL or local HTML file for runtime UX problems that WCAG checks miss. Back/forward cache blockers, view transitions, speculation rules, INP and main-thread smells, dialog, popover, z-index and motion issues, and mobile viewport bugs (100vh, safe areas, tap targets, scroll hijacking). Static pass for CI; --dynamic adds Chromium INP, bfcache and focus probes. Exits 1 on critical or serious.
What it loads into context
Frontmatter
103 tokensAlways available to the agent
SKILL.md
3,080 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Run
- Options
- Output
- Budgets (brand.json)
- Exit codes
- Rules
- Notes
Scripts executed separately
../../bin/atelier../../bin/atelier../../lib/doctor.mjs../../lib/preflight.mjs../../scripts/run-demo.mjsdynamic/browser/observers.jsdynamic/browser/sweep.jsdynamic/index.mjsdynamic/inp.mjsdynamic/probes.mjsdynamic/serve.mjsindex.mjslib/browser.mjslib/budgets.mjslib/collect.mjslib/context.mjslib/csp.mjslib/css-model.mjslib/css-values.mjslib/errors.mjslib/fetch.mjslib/headline.mjslib/html-model.mjslib/js-model.mjslib/options.mjslib/report-md.mjslib/report-raw.mjslib/runner.mjslib/selector-match.mjslib/suppress.mjslib/url.mjsrules/index.mjsrules/inp/dynamic.mjsrules/inp/hydration.mjsrules/inp/index.mjsrules/inp/listeners.mjsrules/inp/rum.mjsrules/inp/scheduling.mjsrules/inp/shared.mjsrules/mobile/css.mjsrules/mobile/index.mjsrules/mobile/js.mjsrules/mobile/pwa.mjsrules/mobile/shared.mjsrules/mobile/tap.mjsrules/mobile/viewport.mjsrules/panels/css.mjsrules/panels/dynamic.mjsrules/panels/html.mjsrules/panels/index.mjsrules/panels/js.mjsrules/panels/shared.mjsrules/transitions/analytics.mjsrules/transitions/bfcache.mjsrules/transitions/index.mjsrules/transitions/shared.mjsrules/transitions/speculation.mjsrules/transitions/view-transitions.mjs
Files
../../bin/atelierruns4,934 bytes../../bin/atelierruns4,934 bytes../../lib/doctor.mjsruns5,389 bytes../../lib/preflight.mjsruns11,525 bytes../../scripts/run-demo.mjsruns7,983 bytesSKILL.mdcore12,550 bytesSKILL.mdcore12,550 bytesSKILL.mdcore12,550 bytesdynamic/browser/observers.jsruns5,124 bytesdynamic/browser/sweep.jsruns15,920 bytesdynamic/index.mjsruns12,980 bytesdynamic/inp.mjsruns3,152 bytesdynamic/probes.mjsruns15,726 bytesdynamic/serve.mjsruns5,650 bytesindex.mjsruns8,322 byteslib/browser.mjsruns3,264 byteslib/budgets.mjsruns5,185 byteslib/collect.mjsruns28,732 byteslib/context.mjsruns8,429 byteslib/csp.mjsruns1,441 byteslib/css-model.mjsruns12,058 byteslib/css-values.mjsruns25,683 byteslib/errors.mjsruns1,760 byteslib/fetch.mjsruns5,314 byteslib/headline.mjsruns3,518 byteslib/html-model.mjsruns12,861 byteslib/js-model.mjsruns25,298 byteslib/options.mjsruns8,916 byteslib/report-md.mjsruns9,617 byteslib/report-raw.mjsruns3,084 byteslib/runner.mjsruns9,972 byteslib/selector-match.mjsruns15,001 byteslib/suppress.mjsruns3,788 byteslib/url.mjsruns7,049 bytesrules/index.mjsruns409 bytesrules/inp/dynamic.mjsruns6,442 bytesrules/inp/hydration.mjsruns5,009 bytesrules/inp/index.mjsruns991 bytesrules/inp/listeners.mjsruns16,756 bytesrules/inp/rum.mjsruns4,805 bytesrules/inp/scheduling.mjsruns7,855 bytesrules/inp/shared.mjsruns7,763 bytesrules/mobile/css.mjsruns23,641 bytesrules/mobile/index.mjsruns1,291 bytesrules/mobile/js.mjsruns6,828 bytesrules/mobile/pwa.mjsruns2,982 bytesrules/mobile/shared.mjsruns15,131 bytesrules/mobile/tap.mjsruns4,036 bytesrules/mobile/viewport.mjsruns7,634 bytesrules/panels/css.mjsruns29,542 bytesrules/panels/dynamic.mjsruns1,353 bytesrules/panels/html.mjsruns9,801 bytesrules/panels/index.mjsruns460 bytesrules/panels/js.mjsruns11,100 bytesrules/panels/shared.mjsruns12,262 bytesrules/transitions/analytics.mjsruns2,638 bytesrules/transitions/bfcache.mjsruns4,925 bytesrules/transitions/index.mjsruns525 bytesrules/transitions/shared.mjsruns8,098 bytesrules/transitions/speculation.mjsruns9,248 bytesrules/transitions/view-transitions.mjsruns19,078 bytes
Read SKILL.md
## Run
`node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" ux <url|file> [--dynamic] [--out dir] [--brand path]`
```bash
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" ux dist/index.html
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" ux https://staging.example.com --dynamic --out ux-report
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" ux dist/index.html --brand .atelier/brand.json --area mobile,panels
```
JS API (the module path goes in as an argument and through `pathToFileURL`, so the import works with Windows, macOS and Linux paths):
```bash
node --input-type=module -e "const { pathToFileURL } = await import('node:url'); const m = await import(pathToFileURL(process.argv[1]).href); const r = await m.auditRuntimeUx({ url: 'dist/index.html', outDir: 'ux-report' }); console.log(r.pass, r.summary.rules, r.metrics.inpP75Ms);" "${CLAUDE_SKILL_DIR}/index.mjs"View the complete source on GitHubSkills included
- accessibility-design-audit
- brand-asset-pipeline
- brand-memory
- design-token-sync
- html-to-video
- og-card-generator
- responsive-image-pipeline
- runtime-ux-audit
Repository facts
- License
- MIT
- Created
- Apr 15, 2026
- Last pushed
- Oct 14, 2026
- Forks
- 1
- Open issues
- 1
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 4, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 32 notes
plugins/atelier/bin/atelier:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/accessibility-design-audit/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/accessibility-design-audit/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/accessibility-design-audit/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/bin/atelier:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/brand-asset-pipeline/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/brand-asset-pipeline/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/bin/atelier:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/brand-memory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/brand-memory/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/bin/atelier:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/design-token-sync/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/design-token-sync/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/bin/atelier:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/html-to-video/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/html-to-video/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/html-to-video/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/html-to-video/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/bin/atelier:1Analysis incomplete: Referenced executable target unavailable; not analyzedplugins/atelier/skills/og-card-generator/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 16 dangerous shell commandsin 1 file: plugins/atelier/lib/preflight.mjs:237
- 212 network referencesin 33 files: runtime-ux-audit/rules/mobile/css.mjs:89 plugins/atelier/lib/doctor.mjs:48 runtime-ux-audit/rules/mobile/viewport.mjs:26 and 30 more
- No hidden or obfuscated text
- No instruction overrides
- 107 executable scriptsin 70 files: plugins/atelier/bin/atelier:1 plugins/atelier/lib/doctor.mjs:1 plugins/atelier/lib/preflight.mjs:1 and 67 more
- 1 reference to secretsin 1 file: design-token-sync/SKILL.md:59
- No requests to vote in Hot
Show all 336 signals by file
.claude-plugin/marketplace.json
- Network accessline 3
"owner": { "name": "Ethan Yucetepe", "url": "https://github.com/EthanY33" - Network accessline 4
"name": "Ethan Yucetepe", "url": "https://github.com/EthanY33" }, - Network accessline 5
"url": "https://github.com/EthanY33" - Network accessline 15
"author": { "name": "Ethan Yucetepe", "url": "https://github.com/EthanY33" - Network accessline 16
"name": "Ethan Yucetepe", "url": "https://github.com/EthanY33" }, - Network accessline 17
"url": "https://github.com/EthanY33" - Network accessline 18
}, "homepage": "https://github.com/EthanY33/atelier", "repository": "https://github.com/EthanY33/atelier", - Network accessline 19
"homepage": "https://github.com/EthanY33/atelier", - Network accessline 20
"repository": "https://github.com/EthanY33/atelier",
plugins/atelier/.claude-plugin/plugin.json
- Network accessline 5
"author": { "name": "Ethan Yucetepe", "url": "https://github.com/EthanY33" - Network accessline 6
"name": "Ethan Yucetepe", "url": "https://github.com/EthanY33" }, - Network accessline 7
"url": "https://github.com/EthanY33" - Network accessline 8
}, "homepage": "https://github.com/EthanY33/atelier", "repository": "https://github.com/EthanY33/atelier", - Network accessline 9
"homepage": "https://github.com/EthanY33/atelier", - Network accessline 10
"repository": "https://github.com/EthanY33/atelier",
plugins/atelier/bin/atelier
- Executable scriptline 1
#!/usr/bin/env node - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env node - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env node - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env node - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env node - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env node - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env node - Executable scriptline 1
Executable file; content unavailable - Executable scriptline 1
#!/usr/bin/env node - Executable scriptline 1
Executable file; content unavailable - Network accessline 42
Docs: https://github.com/EthanY33/atelier`; - Network accessline 42
Docs: https://github.com/EthanY33/atelier`; - Network accessline 42
Docs: https://github.com/EthanY33/atelier`; - Network accessline 42
Docs: https://github.com/EthanY33/atelier`; - Network accessline 42
Docs: https://github.com/EthanY33/atelier`; - Network accessline 42
Docs: https://github.com/EthanY33/atelier`; - Network accessline 42
Docs: https://github.com/EthanY33/atelier`; - Network accessline 42
Docs: https://github.com/EthanY33/atelier`;
plugins/atelier/lib/doctor.mjs
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 48
checks.push(major >= MIN_NODE_MAJOR ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` } : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js - Network accessline 48
checks.push(major >= MIN_NODE_MAJOR ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` } : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js - Network accessline 48
checks.push(major >= MIN_NODE_MAJOR ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` } : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js - Network accessline 48
checks.push(major >= MIN_NODE_MAJOR ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` } : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js - Network accessline 48
checks.push(major >= MIN_NODE_MAJOR ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` } : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js - Network accessline 48
checks.push(major >= MIN_NODE_MAJOR ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` } : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js - Network accessline 48
checks.push(major >= MIN_NODE_MAJOR ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` } : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js - Network accessline 48
checks.push(major >= MIN_NODE_MAJOR ? { name: 'node', status: 'ok', detail: `v${process.versions.node}` } : { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js - Network accessline 50
: { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' }); - Network accessline 50
: { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' }); - Network accessline 50
: { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' }); - Network accessline 50
: { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' }); - Network accessline 50
: { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' }); - Network accessline 50
: { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' }); - Network accessline 50
: { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' }); - Network accessline 50
: { name: 'node', status: 'fail', detail: `v${process.versions.node}; atelier needs ${MIN_NODE_MAJOR}+`, fix: 'Install Node.js 22 LTS or newer from https://nodejs.org' });
plugins/atelier/lib/preflight.mjs
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Dangerous shell operationline 237
fix: `sudo ${npxPlaywright()} install-deps chromium`, - Dangerous shell operationline 237
fix: `sudo ${npxPlaywright()} install-deps chromium`, - Dangerous shell operationline 237
fix: `sudo ${npxPlaywright()} install-deps chromium`, - Dangerous shell operationline 237
fix: `sudo ${npxPlaywright()} install-deps chromium`, - Dangerous shell operationline 237
fix: `sudo ${npxPlaywright()} install-deps chromium`, - Dangerous shell operationline 237
fix: `sudo ${npxPlaywright()} install-deps chromium`, - Dangerous shell operationline 237
fix: `sudo ${npxPlaywright()} install-deps chromium`, - Dangerous shell operationline 237
fix: `sudo ${npxPlaywright()} install-deps chromium`, - Dangerous shell operationline 258
return 'sudo apt install ffmpeg (or your distro\'s package manager)'; - Dangerous shell operationline 258
return 'sudo apt install ffmpeg (or your distro\'s package manager)'; - Dangerous shell operationline 258
return 'sudo apt install ffmpeg (or your distro\'s package manager)'; - Dangerous shell operationline 258
return 'sudo apt install ffmpeg (or your distro\'s package manager)'; - Dangerous shell operationline 258
return 'sudo apt install ffmpeg (or your distro\'s package manager)'; - Dangerous shell operationline 258
return 'sudo apt install ffmpeg (or your distro\'s package manager)'; - Dangerous shell operationline 258
return 'sudo apt install ffmpeg (or your distro\'s package manager)'; - Dangerous shell operationline 258
return 'sudo apt install ffmpeg (or your distro\'s package manager)';
plugins/atelier/schemas/brand.schema.json
plugins/atelier/scripts/run-demo.mjs
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Executable scriptline 1
Executable file
plugins/atelier/skills/accessibility-design-audit/SKILL.md
- Network accessline 9
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y https://staging.example.com - Network accessline 10
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y dist/index.html --out a11y-report node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y http://localhost:3000 --wait-for "#app main" --tags wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22aa node "${CLAUDE_PLUGIN - Network accessline 11
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" a11y http://localhost:3000 --wait-for "#app main" --tags wcag2a,wcag2aa,wcag21a,wcag21aa,wcag22aa - Network accessline 25
- `<url|file>` / `url`: http(s), file or data URL, or a path to an HTML file (relative or absolute). A bare `example.com` is not guessed: pass `https://example.com`.
plugins/atelier/skills/accessibility-design-audit/index.mjs
- Executable scriptline 1
Executable file - Network accessline 68
} const looksLikeHost = /^[\w-]+(\.[\w-]+)+(:\d+)?(\/.*)?$/.test(input) && !/\.html?$/i.test(input); const hint = looksLikeHost ? `. For a website, pass a full URL such as https://${input}` : ''; - Network accessline 69
const looksLikeHost = /^[\w-]+(\.[\w-]+)+(:\d+)?(\/.*)?$/.test(input) && !/\.html?$/i.test(input); const hint = looksLikeHost ? `. For a website, pass a full URL such as https://${input}` : ''; throw new AuditError(`no such file: ${abs} - Network accessline 70
const hint = looksLikeHost ? `. For a website, pass a full URL such as https://${input}` : '';
plugins/atelier/skills/brand-asset-pipeline/SKILL.md
- Network accessline 67
<link rel="icon" type="image/png" sizes="192x192" href="/brand/android-chrome-192.png"> <link rel="icon" type="image/png" sizes="512x512" href="/brand/android-chrome-512.png"> <meta property="og:image" content="https://example.com/brand/og- - Network accessline 68
<link rel="icon" type="image/png" sizes="512x512" href="/brand/android-chrome-512.png"> <meta property="og:image" content="https://example.com/brand/og-cover.png"> <meta property="og:image:width" content="1200"> - Network accessline 69
<meta property="og:image" content="https://example.com/brand/og-cover.png"> - Network accessline 71
<meta property="og:image:height" content="630"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:image" content="https://example.com/brand/og-cover.png"> - Network accessline 73
<meta name="twitter:image" content="https://example.com/brand/og-cover.png">
plugins/atelier/skills/brand-asset-pipeline/index.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/brand-memory/index.mjs
- Executable scriptline 1
Executable file - Executable scriptline 1
Executable file - Network accessline 25
export const BRAND_SCHEMA_URL = 'https://raw.githubusercontent.com/EthanY33/atelier/main/plugins/atelier/schemas/brand.schema.json'; - Network accessline 25
export const BRAND_SCHEMA_URL = 'https://raw.githubusercontent.com/EthanY33/atelier/main/plugins/atelier/schemas/brand.schema.json'; - Network accessline 26
'https://raw.githubusercontent.com/EthanY33/atelier/main/plugins/atelier/schemas/brand.schema.json'; - Network accessline 26
'https://raw.githubusercontent.com/EthanY33/atelier/main/plugins/atelier/schemas/brand.schema.json';
plugins/atelier/skills/design-token-sync/SKILL.md
- Network accessline 57
- Fonts are emitted as CSS font-family lists. `Silkscreen, 'Courier New', monospace` becomes `"Silkscreen", "Courier New", monospace`: family names are quoted and escaped, generic families (serif, sans-serif, monospace, system-ui, ui-monosp - Network accessline 58
- Any palette key brand.json allows works (`brand-500`, `default`); object keys are quoted where needed. Named exports in tokens.js use safe identifiers: other keys are camelCased (`brand-500` -> `brand500`, `brand-primary` -> `brandPrimary - Network accessline 59
[Credential-related source omitted] - Access to secretsline 59
[Credential-related source omitted]
plugins/atelier/skills/design-token-sync/emitters/css.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/design-token-sync/emitters/dts.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/design-token-sync/emitters/figma.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/design-token-sync/emitters/js.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/design-token-sync/emitters/shared.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/design-token-sync/emitters/tailwind.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/design-token-sync/index.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/html-to-video/SKILL.md
- Network accessline 11
node "${CLAUDE_PLUGIN_ROOT}/bin/atelier" video http://localhost:5173/trailer.html dist/trailer.mp4 10 --width 1920 --height 1080 - Network accessline 39
API name first, then the CLI form. - `url` (1st argument): http(s), `file://` or `data:` URL, or a path to a local HTML file (relative to the working directory). `localhost:5173/x` without a scheme is rejected; write `http://localhost:5173/ - Network accessline 40
- `url` (1st argument): http(s), `file://` or `data:` URL, or a path to a local HTML file (relative to the working directory). `localhost:5173/x` without a scheme is rejected; write `http://localhost:5173/x`.
plugins/atelier/skills/html-to-video/index.mjs
- Executable scriptline 1
Executable file - Network accessline 82
} if (/^[^/\\:]+:\d+(\/|$)/.test(input)) { throw new TypeError(`"${input}" has no scheme; did you mean http://${input} ?`); - Network accessline 83
if (/^[^/\\:]+:\d+(\/|$)/.test(input)) { throw new TypeError(`"${input}" has no scheme; did you mean http://${input} ?`); } - Network accessline 84
throw new TypeError(`"${input}" has no scheme; did you mean http://${input} ?`);
plugins/atelier/skills/og-card-generator/SKILL.md
- Network accessline 81
<meta property="og:image" content="https://example.com/og/home.png" /> - Network accessline 83
<meta property="og:image:height" content="630" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:image" content="https://example.com/og/home.png" /> - Network accessline 85
<meta name="twitter:image" content="https://example.com/og/home.png" />
plugins/atelier/skills/og-card-generator/index.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/responsive-image-pipeline/index.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/SKILL.md
plugins/atelier/skills/runtime-ux-audit/dynamic/browser/observers.js
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/dynamic/browser/sweep.js
plugins/atelier/skills/runtime-ux-audit/dynamic/index.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/dynamic/inp.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/dynamic/probes.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/dynamic/serve.mjs
- Executable scriptline 1
Executable file - Network accessline 4
* Chromium only puts http(s) pages in the back/forward cache, and module * scripts and same-origin fetches behave like production only over http, so * a local file is served from http://127.0.0.1:<port>/ rooted at the audit - Network accessline 5
* scripts and same-origin fetches behave like production only over http, so * a local file is served from http://127.0.0.1:<port>/ rooted at the audit * root. GET and HEAD only; no directory listing; no cache headers. Every - Network accessline 6
* a local file is served from http://127.0.0.1:<port>/ rooted at the audit - Network accessline 88
let pathname; try { pathname = decodeURIComponent(new URL(req.url ?? '/', 'http://127.0.0.1').pathname); - Network accessline 89
try { pathname = decodeURIComponent(new URL(req.url ?? '/', 'http://127.0.0.1').pathname); } catch { - Network accessline 90
pathname = decodeURIComponent(new URL(req.url ?? '/', 'http://127.0.0.1').pathname); - Network accessline 122
const { port } = server.address(); host = `127.0.0.1:${port}`; const origin = `http://${host}`; - Network accessline 124
const origin = `http://${host}`;
plugins/atelier/skills/runtime-ux-audit/index.mjs
plugins/atelier/skills/runtime-ux-audit/lib/browser.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/budgets.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/collect.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/context.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/csp.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/css-model.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/css-values.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/errors.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/fetch.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/headline.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/html-model.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/js-model.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/options.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/report-md.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/report-raw.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/runner.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/selector-match.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/suppress.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/lib/url.mjs
- Executable scriptline 1
Executable file - Network accessline 39
if (/^[a-zA-Z]:[\\/]/.test(s)) return { kind: 'file', filePath: resolve(s) }; if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(s)) { throw new UxAuditError('SCHEME_NOT_ALLOWED', `Unsupported scheme in ${s.slice(0, s.indexOf(':') + 1)}. Use a loca - Network accessline 40
if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(s)) { throw new UxAuditError('SCHEME_NOT_ALLOWED', `Unsupported scheme in ${s.slice(0, s.indexOf(':') + 1)}. Use a local path, file://, http:// or https://.`); } - Network accessline 41
throw new UxAuditError('SCHEME_NOT_ALLOWED', `Unsupported scheme in ${s.slice(0, s.indexOf(':') + 1)}. Use a local path, file://, http:// or https://.`); - Network accessline 46
/** Normalize an origin allow-list entry ('https://cdn.example.com/x' -> 'https://cdn.example.com'). */
plugins/atelier/skills/runtime-ux-audit/rules/index.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/inp/dynamic.mjs
- Executable scriptline 1
Executable file - Network accessline 19
methods: ['trace'], description: 'The lab INP estimate (Event Timing, 4x CPU throttle, Pixel 7 profile) exceeds the INP budget from brand.json targets.inpBudgetMs or the 200 ms default.', helpUrl: 'https://web.dev/articles/inp', - Network accessline 20
description: 'The lab INP estimate (Event Timing, 4x CPU throttle, Pixel 7 profile) exceeds the INP budget from brand.json targets.inpBudgetMs or the 200 ms default.', helpUrl: 'https://web.dev/articles/inp', check(ctx) { - Network accessline 21
helpUrl: 'https://web.dev/articles/inp', - Network accessline 61
methods: ['trace'], description: 'A script ran longer than 100 ms inside one long animation frame during the interaction probe, blocking input and rendering.', helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation-fram - Network accessline 62
description: 'A script ran longer than 100 ms inside one long animation frame during the interaction probe, blocking input and rendering.', helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation-frames', check(ctx) { - Network accessline 63
helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation-frames', - Network accessline 112
methods: ['dom'], description: 'A long list of repeated blocks sits mostly below the fold without content-visibility: auto, so every item pays style and layout cost up front.', helpUrl: 'https://web.dev/articles/content-visibility', - Network accessline 113
description: 'A long list of repeated blocks sits mostly below the fold without content-visibility: auto, so every item pays style and layout cost up front.', helpUrl: 'https://web.dev/articles/content-visibility', check(ctx) { - Network accessline 114
helpUrl: 'https://web.dev/articles/content-visibility',
plugins/atelier/skills/runtime-ux-audit/rules/inp/hydration.mjs
- Executable scriptline 1
Executable file - Network accessline 85
methods: ['html', 'js'], description: 'A framework hydration runtime ships with a page whose server-rendered body has no interactive elements, spending main-thread time for nothing.', helpUrl: 'https://qwik.dev/docs/concepts/resumable/' - Network accessline 86
description: 'A framework hydration runtime ships with a page whose server-rendered body has no interactive elements, spending main-thread time for nothing.', helpUrl: 'https://qwik.dev/docs/concepts/resumable/', check(ctx) { - Network accessline 87
helpUrl: 'https://qwik.dev/docs/concepts/resumable/',
plugins/atelier/skills/runtime-ux-audit/rules/inp/index.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/inp/listeners.mjs
- Executable scriptline 1
Executable file - Network accessline 21
methods: ['js'], description: 'A touch or wheel listener that never cancels its event is registered without { passive: true }, so scrolling waits for it on the main thread.', helpUrl: 'https://developer.chrome.com/docs/lighthouse/best-p - Network accessline 22
description: 'A touch or wheel listener that never cancels its event is registered without { passive: true }, so scrolling waits for it on the main thread.', helpUrl: 'https://developer.chrome.com/docs/lighthouse/best-practices/uses-passi - Network accessline 23
helpUrl: 'https://developer.chrome.com/docs/lighthouse/best-practices/uses-passive-event-listeners', - Network accessline 184
methods: ['js'], description: 'An input handler writes styles or classes and then reads layout in the same task, forcing a synchronous style and layout pass.', helpUrl: 'https://web.dev/articles/avoid-large-complex-layouts-and-layout-th - Network accessline 185
description: 'An input handler writes styles or classes and then reads layout in the same task, forcing a synchronous style and layout pass.', helpUrl: 'https://web.dev/articles/avoid-large-complex-layouts-and-layout-thrashing', check(c - Network accessline 186
helpUrl: 'https://web.dev/articles/avoid-large-complex-layouts-and-layout-thrashing', - Network accessline 270
methods: ['js'], description: 'A scroll listener drives transform or opacity from JavaScript where a CSS scroll-driven animation could run off the main thread.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Prope - Network accessline 271
description: 'A scroll listener drives transform or opacity from JavaScript where a CSS scroll-driven animation could run off the main thread.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/animation-tim - Network accessline 272
helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/animation-timeline', - Network accessline 315
methods: ['js', 'html'], description: 'The same target listens to both mouse and touch events for one gesture; a single pointer event listener handles every input type once.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/P - Network accessline 316
description: 'The same target listens to both mouse and touch events for one gesture; a single pointer event listener handles every input type once.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events', check(ctx - Network accessline 317
helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events',
plugins/atelier/skills/runtime-ux-audit/rules/inp/rum.mjs
- Executable scriptline 1
Executable file - Network accessline 23
methods: ['js'], description: 'The page reports Core Web Vitals with web-vitals but never registers onINP, so field responsiveness is not measured.', helpUrl: 'https://www.npmjs.com/package/web-vitals', - Network accessline 24
description: 'The page reports Core Web Vitals with web-vitals but never registers onINP, so field responsiveness is not measured.', helpUrl: 'https://www.npmjs.com/package/web-vitals', check(ctx) { - Network accessline 25
helpUrl: 'https://www.npmjs.com/package/web-vitals', - Network accessline 94
methods: ['js'], description: 'A PerformanceObserver watches longtask entries with no long-animation-frame observer, so slow frames are not attributed to scripts.', helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation - Network accessline 95
description: 'A PerformanceObserver watches longtask entries with no long-animation-frame observer, so slow frames are not attributed to scripts.', helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation-frames', check(c - Network accessline 96
helpUrl: 'https://developer.chrome.com/docs/web-platform/long-animation-frames',
plugins/atelier/skills/runtime-ux-audit/rules/inp/scheduling.mjs
- Executable scriptline 1
Executable file - Network accessline 76
methods: ['js'], description: 'setTimeout(fn, 0) is used to yield inside a loop; the continuation queues behind every other task instead of resuming first.', helpUrl: 'https://developer.chrome.com/blog/use-scheduler-yield', - Network accessline 77
description: 'setTimeout(fn, 0) is used to yield inside a loop; the continuation queues behind every other task instead of resuming first.', helpUrl: 'https://developer.chrome.com/blog/use-scheduler-yield', check(ctx) { - Network accessline 78
helpUrl: 'https://developer.chrome.com/blog/use-scheduler-yield', - Network accessline 125
methods: ['js'], description: 'requestIdleCallback is called without a timeout, so on a busy page the callback can be delayed indefinitely.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback', - Network accessline 126
description: 'requestIdleCallback is called without a timeout, so on a busy page the callback can be delayed indefinitely.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback', check(ctx) { - Network accessline 127
helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback', - Network accessline 170
methods: ['js'], description: 'A synchronous XMLHttpRequest blocks the main thread, and every pending input, for the whole network round trip.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open', - Network accessline 171
description: 'A synchronous XMLHttpRequest blocks the main thread, and every pending input, for the whole network round trip.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open', check(ctx) { - Network accessline 172
helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/open', - Network accessline 180
out.push({ node: ctx.ref.js(call), message: `XMLHttpRequest.open(${method !== null ? `'${method.toUpperCase()}', ` : ''}..., false) is synchronous; use fetch() or an async XMLHttpRequest.`, - Network accessline 181
node: ctx.ref.js(call), message: `XMLHttpRequest.open(${method !== null ? `'${method.toUpperCase()}', ` : ''}..., false) is synchronous; use fetch() or an async XMLHttpRequest.`, }); - Network accessline 182
message: `XMLHttpRequest.open(${method !== null ? `'${method.toUpperCase()}', ` : ''}..., false) is synchronous; use fetch() or an async XMLHttpRequest.`,
plugins/atelier/skills/runtime-ux-audit/rules/inp/shared.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/mobile/css.mjs
- Executable scriptline 1
Executable file - Network accessline 89
phase: 'static', description: 'A full-height box is sized with 100vh and no dvh or svh fallback, so on phones it is taller than the visible viewport while the URL bar shows.', helpUrl: 'https://web.dev/blog/viewport-units', - Network accessline 90
description: 'A full-height box is sized with 100vh and no dvh or svh fallback, so on phones it is taller than the visible viewport while the URL bar shows.', helpUrl: 'https://web.dev/blog/viewport-units', check(ctx) { - Network accessline 91
helpUrl: 'https://web.dev/blog/viewport-units', - Network accessline 116
phase: 'static', description: 'A position: fixed or sticky element is sized in vh, which follows the large viewport on phones and overstates the visible area while browser toolbars show.', helpUrl: 'https://web.dev/blog/viewport-units', - Network accessline 117
description: 'A position: fixed or sticky element is sized in vh, which follows the large viewport on phones and overstates the visible area while browser toolbars show.', helpUrl: 'https://web.dev/blog/viewport-units', check(ctx) { - Network accessline 118
helpUrl: 'https://web.dev/blog/viewport-units', - Network accessline 169
phase: 'static', description: 'A horizontal carousel scrolls freely without scroll-snap-type, or scroll-snap-align is set with no snap container, so swipes stop between slides.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CS - Network accessline 170
description: 'A horizontal carousel scrolls freely without scroll-snap-type, or scroll-snap-align is set with no snap container, so swipes stop between slides.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_scroll_snap', - Network accessline 171
helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_scroll_snap', - Network accessline 258
phase: 'static', description: 'A scrollable modal has no overscroll-behavior and the page has no body scroll lock, so scrolling past its end scrolls the page behind it.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/oversc - Network accessline 259
description: 'A scrollable modal has no overscroll-behavior and the page has no body scroll lock, so scrolling past its end scrolls the page behind it.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior', c - Network accessline 260
helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/overscroll-behavior', - Network accessline 289
phase: 'static', description: '-webkit-overflow-scrolling: touch has been a no-op since iOS 13, where every overflow scroller already uses momentum scrolling.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-overflow - Network accessline 290
description: '-webkit-overflow-scrolling: touch has been a no-op since iOS 13, where every overflow scroller already uses momentum scrolling.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-overflow-scrolling', chec - Network accessline 291
helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-overflow-scrolling', - Network accessline 423
phase: 'static', description: 'Content hidden by default is revealed only by :hover on an ancestor or sibling, with no :focus, :focus-within or click-state equivalent, so touch users cannot reach it.', helpUrl: 'https://www.w3.org/WAI/W - Network accessline 424
description: 'Content hidden by default is revealed only by :hover on an ancestor or sibling, with no :focus, :focus-within or click-state equivalent, so touch users cannot reach it.', helpUrl: 'https://www.w3.org/WAI/WCAG22/Understanding - Network accessline 425
helpUrl: 'https://www.w3.org/WAI/WCAG22/Understanding/content-on-hover-or-focus',
plugins/atelier/skills/runtime-ux-audit/rules/mobile/index.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/mobile/js.mjs
- Executable scriptline 1
Executable file - Network accessline 31
phase: 'static', description: 'A touchstart or touchmove listener on window, document or body opts out of passive mode, so every scroll gesture waits for the handler to run.', helpUrl: 'https://web.dev/articles/uses-passive-event-listen - Network accessline 32
description: 'A touchstart or touchmove listener on window, document or body opts out of passive mode, so every scroll gesture waits for the handler to run.', helpUrl: 'https://web.dev/articles/uses-passive-event-listeners', check(ctx) - Network accessline 33
helpUrl: 'https://web.dev/articles/uses-passive-event-listeners', - Network accessline 58
phase: 'static', description: 'A non-passive touch or wheel listener on window, document or body calls preventDefault() on every event, which disables native scrolling.', helpUrl: 'https://web.dev/articles/uses-passive-event-listeners', - Network accessline 59
description: 'A non-passive touch or wheel listener on window, document or body calls preventDefault() on every event, which disables native scrolling.', helpUrl: 'https://web.dev/articles/uses-passive-event-listeners', check(ctx) { - Network accessline 60
helpUrl: 'https://web.dev/articles/uses-passive-event-listeners', - Network accessline 88
phase: 'static', description: 'Notification permission or a push subscription is requested without a display-mode: standalone check, but iOS offers web push only to Home Screen web apps.', helpUrl: 'https://webkit.org/blog/13878/web-pus - Network accessline 89
description: 'Notification permission or a push subscription is requested without a display-mode: standalone check, but iOS offers web push only to Home Screen web apps.', helpUrl: 'https://webkit.org/blog/13878/web-push-for-web-apps-on-i - Network accessline 90
helpUrl: 'https://webkit.org/blog/13878/web-push-for-web-apps-on-ios-and-ipados/', - Network accessline 137
phase: 'static', description: 'Script fights the browser tap handling (a touchend double-tap timer with preventDefault, or FastClick) where touch-action: manipulation or a device-width viewport is enough.', helpUrl: 'https://web.dev/art - Network accessline 138
description: 'Script fights the browser tap handling (a touchend double-tap timer with preventDefault, or FastClick) where touch-action: manipulation or a device-width viewport is enough.', helpUrl: 'https://web.dev/articles/mobile-touch' - Network accessline 139
helpUrl: 'https://web.dev/articles/mobile-touch',
plugins/atelier/skills/runtime-ux-audit/rules/mobile/pwa.mjs
- Executable scriptline 1
Executable file - Network accessline 31
phase: 'static', description: 'An installable page has no apple-touch-icon and no manifest icon of at least 180x180, so iOS adds it to the Home Screen with a blurry or screenshot icon.', helpUrl: 'https://web.dev/articles/install-criter - Network accessline 32
description: 'An installable page has no apple-touch-icon and no manifest icon of at least 180x180, so iOS adds it to the Home Screen with a blurry or screenshot icon.', helpUrl: 'https://web.dev/articles/install-criteria', check(ctx) { - Network accessline 33
helpUrl: 'https://web.dev/articles/install-criteria',
plugins/atelier/skills/runtime-ux-audit/rules/mobile/shared.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/mobile/tap.mjs
- Executable scriptline 1
Executable file - Network accessline 46
brand: true, description: 'An interactive element is smaller than the minimum tap size (24px by WCAG 2.2 SC 2.5.8, or targets.minTapPx) and, at the default floor, too close to other targets.', helpUrl: 'https://www.w3.org/TR/WCAG22/#tar - Network accessline 47
description: 'An interactive element is smaller than the minimum tap size (24px by WCAG 2.2 SC 2.5.8, or targets.minTapPx) and, at the default floor, too close to other targets.', helpUrl: 'https://www.w3.org/TR/WCAG22/#target-size-minimu - Network accessline 48
helpUrl: 'https://www.w3.org/TR/WCAG22/#target-size-minimum',
plugins/atelier/skills/runtime-ux-audit/rules/mobile/viewport.mjs
- Executable scriptline 1
Executable file - Network accessline 26
phase: 'static', description: 'The page has no viewport meta with width=device-width, so phones lay it out at a 980px desktop width and scale it down.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag', - Network accessline 27
description: 'The page has no viewport meta with width=device-width, so phones lay it out at a 980px desktop width and scale it down.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag', check(ctx) { - Network accessline 28
helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Viewport_meta_tag', - Network accessline 50
rendered: true, description: 'The viewport meta disables or caps pinch zoom (user-scalable=no or maximum-scale below 2), which fails WCAG 1.4.4 Resize Text.', helpUrl: 'https://www.w3.org/TR/WCAG22/#resize-text', - Network accessline 51
description: 'The viewport meta disables or caps pinch zoom (user-scalable=no or maximum-scale below 2), which fails WCAG 1.4.4 Resize Text.', helpUrl: 'https://www.w3.org/TR/WCAG22/#resize-text', check(ctx) { - Network accessline 52
helpUrl: 'https://www.w3.org/TR/WCAG22/#resize-text', - Network accessline 78
phase: 'static', description: 'CSS uses env(safe-area-inset-*) but the viewport meta lacks viewport-fit=cover, so every inset resolves to 0 and the padding is dead code.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/env', - Network accessline 79
description: 'CSS uses env(safe-area-inset-*) but the viewport meta lacks viewport-fit=cover, so every inset resolves to 0 and the padding is dead code.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/env', check(ctx) { - Network accessline 80
helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/env', - Network accessline 111
phase: 'static', description: 'A position: fixed element pinned to bottom 0 under viewport-fit=cover never pads for env(safe-area-inset-bottom), so the home indicator overlaps it.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web - Network accessline 112
description: 'A position: fixed element pinned to bottom 0 under viewport-fit=cover never pads for env(safe-area-inset-bottom), so the home indicator overlaps it.', helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/env', check( - Network accessline 113
helpUrl: 'https://developer.mozilla.org/en-US/docs/Web/CSS/env', - Network accessline 146
rendered: true, description: 'A fixed, bottom-anchored bar holds a text field but the viewport meta has no interactive-widget key, so the on-screen keyboard covers it in Chromium.', helpUrl: 'https://developer.chrome.com/blog/viewport-r - Network accessline 147
description: 'A fixed, bottom-anchored bar holds a text field but the viewport meta has no interactive-widget key, so the on-screen keyboard covers it in Chromium.', helpUrl: 'https://developer.chrome.com/blog/viewport-resize-behavior', - Network accessline 148
helpUrl: 'https://developer.chrome.com/blog/viewport-resize-behavior',
plugins/atelier/skills/runtime-ux-audit/rules/panels/css.mjs
- Executable scriptline 1
Executable file - Network accessline 13
const HELP = Object.freeze({ topLayer: 'https://drafts.csswg.org/css-position-4/#top-layer', - Network accessline 14
topLayer: 'https://drafts.csswg.org/css-position-4/#top-layer', - Network accessline 15
startingStyle: 'https://developer.mozilla.org/en-US/docs/Web/CSS/@starting-style', - Network accessline 16
entryExit: 'https://web.dev/articles/entry-exit-animations', - Network accessline 17
reducedMotion: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/prefers-reduced-motion', - Network accessline 18
motion: 'https://m3.material.io/styles/motion/overview', - Network accessline 19
anchor: 'https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_anchor_positioning', - Network accessline 20
overflow: 'https://developer.mozilla.org/en-US/docs/Web/CSS/overflow', - Network accessline 21
backdropFilter: 'https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter',
plugins/atelier/skills/runtime-ux-audit/rules/panels/dynamic.mjs
- Executable scriptline 1
Executable file - Network accessline 12
methods: ['trace'], description: 'After a dialog closed, focus fell to the page body instead of returning to the control that opened it.', helpUrl: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/', - Network accessline 13
description: 'After a dialog closed, focus fell to the page body instead of returning to the control that opened it.', helpUrl: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/', check(ctx) { - Network accessline 14
helpUrl: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/',
plugins/atelier/skills/runtime-ux-audit/rules/panels/html.mjs
- Executable scriptline 1
Executable file - Network accessline 10
const HELP = Object.freeze({ dialogPattern: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/', - Network accessline 11
dialogPattern: 'https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/', - Network accessline 12
dialogElement: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog', - Network accessline 13
tooltip: 'https://www.w3.org/WAI/ARIA/apg/patterns/tooltip/', - Network accessline 14
backdrop: 'https://developer.mozilla.org/en-US/docs/Web/CSS/::backdrop', - Network accessline 15
closedby: 'https://html.spec.whatwg.org/multipage/interactive-elements.html#attr-dialog-closedby',
plugins/atelier/skills/runtime-ux-audit/rules/panels/index.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/panels/js.mjs
- Executable scriptline 1
Executable file - Network accessline 8
const HELP = Object.freeze({ dialogElement: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog', - Network accessline 9
dialogElement: 'https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog', - Network accessline 10
popover: 'https://developer.mozilla.org/en-US/docs/Web/API/Popover_API', - Network accessline 11
menubar: 'https://www.w3.org/WAI/ARIA/apg/patterns/menubar/', - Network accessline 12
inert: 'https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/inert',
plugins/atelier/skills/runtime-ux-audit/rules/panels/shared.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/transitions/analytics.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/transitions/bfcache.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/transitions/index.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/transitions/shared.mjs
- Executable scriptline 1
Executable file - Network accessline 6
export const HELP = Object.freeze({ bfcache: 'https://web.dev/articles/bfcache', - Network accessline 7
bfcache: 'https://web.dev/articles/bfcache', - Network accessline 8
bfcacheReasons: 'https://developer.chrome.com/docs/web-platform/bfcache-notrestoredreasons', - Network accessline 9
bfcacheCcns: 'https://developer.chrome.com/docs/web-platform/bfcache-ccns', - Network accessline 10
vtUsing: 'https://developer.mozilla.org/en-US/docs/Web/API/View_Transition_API/Using', - Network accessline 11
reducedMotion: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/prefers-reduced-motion', - Network accessline 12
vtName: 'https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/view-transition-name', - Network accessline 13
speculationImprovements: 'https://developer.chrome.com/blog/speculation-rules-improvements', - Network accessline 14
speculationApi: 'https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API', - Network accessline 15
prerendering: 'https://developer.mozilla.org/en-US/docs/Web/API/Document/prerendering',
plugins/atelier/skills/runtime-ux-audit/rules/transitions/speculation.mjs
- Executable scriptline 1
Executable file
plugins/atelier/skills/runtime-ux-audit/rules/transitions/view-transitions.mjs
- Executable scriptline 1
Executable file
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 37 facts
- Contacts github.com, which SKILL.md, the README and the plugin manifest do not mentionplugins/atelier/bin/atelier:42High confidence
- Contacts nodejs.org, which SKILL.md, the README and the plugin manifest do not mentionplugins/atelier/lib/doctor.mjs:50High confidence
- Contacts raw.githubusercontent.com, which SKILL.md, the README and the plugin manifest do not mentionplugins/atelier/skills/brand-memory/index.mjs:26High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/dynamic/browser/sweep.js:31High confidence
- Contacts web.dev, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/inp/dynamic.mjs:21High confidence
- Contacts developer.chrome.com, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/inp/dynamic.mjs:63High confidence
- Contacts qwik.dev, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/inp/hydration.mjs:87High confidence
- Contacts developer.chrome.com, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/inp/listeners.mjs:23High confidence
- Contacts web.dev, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/inp/listeners.mjs:186High confidence
- Contacts developer.mozilla.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/inp/listeners.mjs:272High confidence
- Contacts www.npmjs.com, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/inp/rum.mjs:25High confidence
- Contacts developer.chrome.com, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/inp/rum.mjs:96High confidence
- Contacts developer.chrome.com, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/inp/scheduling.mjs:78High confidence
- Contacts developer.mozilla.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/inp/scheduling.mjs:127High confidence
- Contacts web.dev, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/mobile/css.mjs:91High confidence
- Contacts developer.mozilla.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/mobile/css.mjs:171High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/mobile/css.mjs:425High confidence
- Contacts web.dev, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/mobile/js.mjs:33High confidence
- Contacts webkit.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/mobile/js.mjs:90High confidence
- Contacts web.dev, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/mobile/pwa.mjs:33High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/mobile/tap.mjs:48High confidence
- Contacts developer.mozilla.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/mobile/viewport.mjs:28High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/mobile/viewport.mjs:52High confidence
- Contacts developer.chrome.com, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/mobile/viewport.mjs:148High confidence
- Contacts drafts.csswg.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/panels/css.mjs:14High confidence
- Contacts developer.mozilla.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/panels/css.mjs:15High confidence
- Contacts web.dev, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/panels/css.mjs:16High confidence
- Contacts m3.material.io, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/panels/css.mjs:18High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/panels/dynamic.mjs:14High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/panels/html.mjs:11High confidence
- Contacts developer.mozilla.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/panels/html.mjs:12High confidence
- Contacts html.spec.whatwg.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/panels/html.mjs:15High confidence
- Contacts developer.mozilla.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/panels/js.mjs:9High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/panels/js.mjs:11High confidence
- Contacts web.dev, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/transitions/shared.mjs:7High confidence
- Contacts developer.chrome.com, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/transitions/shared.mjs:8High confidence
- Contacts developer.mozilla.org, which SKILL.md, the README and the plugin manifest do not mentionruntime-ux-audit/rules/transitions/shared.mjs:10High confidence
Signal confidence: 318 facts
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Executable script in code of a file that runsplugins/atelier/bin/atelier:1High confidence
- Network access in code of a file that runsplugins/atelier/bin/atelier:42High confidence
- Network access in code of a file that runsplugins/atelier/bin/atelier:42High confidence
- Network access in code of a file that runsplugins/atelier/bin/atelier:42High confidence
- Network access in code of a file that runsplugins/atelier/bin/atelier:42High confidence
- Network access in code of a file that runsplugins/atelier/bin/atelier:42High confidence
- Network access in code of a file that runsplugins/atelier/bin/atelier:42High confidence
- Network access in code of a file that runsplugins/atelier/bin/atelier:42High confidence
- Network access in code of a file that runsplugins/atelier/bin/atelier:42High confidence
- Executable script in a comment of a file that runsplugins/atelier/lib/doctor.mjs:1Low confidence
- Executable script in a comment of a file that runsplugins/atelier/lib/doctor.mjs:1Low confidence
- Executable script in a comment of a file that runsplugins/atelier/lib/doctor.mjs:1Low confidence
- Executable script in a comment of a file that runsplugins/atelier/lib/doctor.mjs:1Low confidence
- Executable script in a comment of a file that runsplugins/atelier/lib/doctor.mjs:1Low confidence
- Executable script in a comment of a file that runsplugins/atelier/lib/doctor.mjs:1Low confidence
- Executable script in a comment of a file that runsplugins/atelier/lib/doctor.mjs:1Low confidence
- Executable script in a comment of a file that runsplugins/atelier/lib/doctor.mjs:1Low confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:48High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:48High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:48High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:48High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:48High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:48High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:48High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:48High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:50High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:50High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:50High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:50High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:50High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:50High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:50High confidence
- Network access in code of a file that runsplugins/atelier/lib/doctor.mjs:50High confidence
- Executable script in a comment of a file that runsplugins/atelier/lib/preflight.mjs:1Low confidence
- Executable script in a comment of a file that runsplugins/atelier/lib/preflight.mjs:1Low confidence
and 268 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md plugins/atelier/skills/accessibility-design-audit/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md plugins/atelier/skills/accessibility-design-audit/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md plugins/atelier/skills/accessibility-design-audit/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md plugins/atelier/skills/accessibility-design-audit/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md plugins/atelier/skills/accessibility-design-audit/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.