| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| Invoke | /jaspr-web |
| Aliases | /jaspr, /coui:web |
| Category | cocode-web |
| Complexity | high |
| MCP Servers | playwright, chrome-devtools |
/jaspr-web โ ์น ํ๋ฉด ์๋ ์ ๊ฒยท๋น๊ต ๋์ฐ๋ฏธ#
ํ๋ง๋๋ก#
์น์ฌ์ดํธ๋ฅผ ์ฌ๋ ๋์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ ๋์๋ค๋๋ฉฐ ํ๋ฉด์ ์ ๊ฒํ๊ณ , ์คํฌ๋ฆฐ์ท์ ๋น๊ตํ๋ ์๋ ๊ฒ์ฌ๊ด์ ๋๋ค. ์ ์ถ ๊ฑด๋ฌผ ์ค๊ณต ๊ฒ์ฌ์ฒ๋ผ, ๊ฐ ๋ฐฉ(ํ์ด์ง)์ ํ ์นธ์ฉ ๋๋ฉฐ ํ ์ง(์ค๋ฅ)์ด๋ ์ค๊ณ๋(๊ธฐ์ค ํ๋ฉด)์ ๋ค๋ฅธ ๋ถ๋ถ์ ์ฐพ์ ๊ธฐ๋กํด ์ค๋๋ค.
๋๊ฐยท์ธ์ ์ฐ๋์#
- Jaspr๋ก ๋ง๋ ์น์ฌ์ดํธ(์: coui.cocode.im)์ ํ๋ฉด ํ์ง์ ์ ๊ฒํ๊ณ ์ถ์ ๋ด๋น์
- ์น ํ๋ฉด๊ณผ Flutter ํ๋ฉด์ด ๋๊ฐ์ด ๋ณด์ด๋์ง(ํฝ์ ๋จ์๋ก) ๋ง์ถฐ ๋ณด๊ณ ์ถ์ ๋
- ์ฝ๋๋ฅผ ๋ฐ๊พผ ๋ค, ํ๋ฉด์ด ์์ ๊ณผ ๋ฌ๋ผ์ง์ง ์์๋์ง(์๊ฐ์ ๋ณํ) ํ์ธํ๊ณ ์ถ์ ๋
- ์ ๊ทผ์ฑ(์๊ฐ์ฅ์ ์ธ ๋ฑ ๋ณด์กฐ ๊ธฐ์ ํธํ)์ด๋ ์ฝ์ ์ค๋ฅ๋ฅผ ํ ๋ฒ์ ํ์ด๋ณด๊ณ ์ถ์ ๋
๋ฌด์์ ํด์ฃผ๋์#
๋ธ๋ผ์ฐ์ ๋ฅผ ์๋์ผ๋ก ๋์ ๋ค์์ ๋์ ํด ์ค๋๋ค.
- ์ฌ์ดํธ๋งต์ ๋ฐ๋ผ ํ์ด์ง๋ฅผ ๋๋ฉฐ ํ๋ฉด ์์ยท์ ๊ทผ์ฑยท์ฝ์ ์ค๋ฅ ๋ชฉ๋ก์ ์ ๋ฆฌ
- ์น ํ๋ฉด โ Flutter ์น ํ๋ฉด์ ํฝ์ ๋จ์๋ก ๋น๊ตํด ์ฐจ์ด ํ์
- ๊ธฐ์ค ํ๋ฉด(baseline)๊ณผ ๋น๊ตํ ์คํฌ๋ฆฐ์ท ์ฐจ์ด(์๊ฐ ํ๊ท) ๊ฒ์ฌ
- ๊ฒ์ฌ ๊ฒฐ๊ณผ๋
.claude/docs/jaspr-web/<run_id>/ํด๋์ ๋ณด๊ณ ์๋ก ์ ์ฅ๋ฉ๋๋ค.
์ด๋ป๊ฒ ์ฐ๋์#
# ์ฒ์ ํ ๋ฒ: ๋ธ๋ผ์ฐ์ ์๋ํ ๋๊ตฌ ์ค์นยท์ ๊ฒ
/jaspr-web setup
# coui.cocode.im ํ๋ฉด ์ ๊ฒ (2๋จ๊ณ ๊น์ด๊น์ง)
/jaspr-web audit --url=https://coui.cocode.im --depth=2
# ๋ผ์ด๋ธ ํ๋ฆฌ๋ทฐ ํ์ด์ง์์ ์น vs Flutter ์ผ์น ์ฌ๋ถ ํ์ธ
/jaspr-web match --url=https://coui.cocode.im/live-preview-poc
# ๋ก์ปฌ ๋๋ฒ๊ทธ Flutter ์น Widgetbook + ์ฃผ๋ณ Jaspr ํ์ด์ง ๊ตฌ๋
/jaspr-web widgetbook-web --port=8080
- URL๋ง ์ฃผ๊ณ ํ์ ๋ช
๋ น์ ์๋ตํ๋ฉด ์๋์ผ๋ก
audit(ํ๋ฉด ์ ๊ฒ)์ผ๋ก ๋์ํฉ๋๋ค. - ๋ ์ ๋ฐํ CSS ๊ฒ์ฌ๋ ์ฑ๋ฅ ์ถ์ ์ด ํ์ํ๋ฉด
--mcp=chrome-devtools๋ฅผ ๋ถ์ฌ Chrome ๋๊ตฌ๋ก ์ ํํ ์ ์์ต๋๋ค.
์์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์#
ํ์ ๋ช ๋ น์ ๋ฐ๋ผ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ ์์ ์ ์๋์ผ๋ก ์ํํฉ๋๋ค.
- setup โ ๋ธ๋ผ์ฐ์ ์๋ํ ๋๊ตฌ(Playwright/Chrome DevTools)๋ฅผ ์ค์นยท๋ฑ๋กํ๊ณ ์ ์ ๋์์ ํ์ธํฉ๋๋ค.
- audit โ ์ฌ์ดํธ๋งต์ ๋ฐ๋ผ ํ์ด์ง๋ฅผ ๋๋ฉฐ ํ๋ฉด ์์ยท์ ๊ทผ์ฑยท์ฝ์ ์ค๋ฅ๋ฅผ ๋ชจ์ ๋ชฉ๋ก์ผ๋ก ๋ง๋ญ๋๋ค.
- match โ ์น ํ๋ฉด๊ณผ Flutter ์น ํ๋ฉด์ ๋๋ํ ๋์ ํฝ์ ๋จ์๋ก ๋น๊ตํฉ๋๋ค.
- widgetbook-web โ ๋ก์ปฌ์์ ๋์ด ๋๋ฒ๊ทธ Flutter ์น Widgetbook ์ธ์ ์ ๋ถ์ด ํ๋ฉด์ ๊ตฌ๋ํฉ๋๋ค.
- regression โ ์ง์ ํ ๊ฒฝ๋ก๋ค์ ์คํฌ๋ฆฐ์ท์ ๊ธฐ์ค ํ๋ฉด๊ณผ ๋น๊ตํด ๋ฌ๋ผ์ง ๋ถ๋ถ์ ์ฐพ์๋ ๋๋ค.
โ๏ธ ์์ธ ์ต์ ยท์คํ ๋ช ์ธ (๊ฐ๋ฐ์ / AI ์์ด์ ํธ์ฉ)
Subcommands#
| Subcommand | Purpose |
|---|---|
setup | Install Playwright/Chrome DevTools MCPs, register, smoke test |
audit | Walk a sitemap, inventory selectors + a11y + console errors (commands/jaspr-web/audit.md) |
match | Dual WebโFlutter Web embed pixel matching (commands/jaspr-web/match.md) |
widgetbook-web | Attach to a local flutter run -d chrome --print-dtd Widgetbook session (commands/jaspr-web/widgetbook-web.md) |
regression | Screenshot diff vs baseline for a list of routes |
Default Behaviour#
If invoked without subcommand and a URL is given, defaults to audit --url=<url>.
Quick Start#
# First time
/jaspr-web setup
# Audit coui.cocode.im
/jaspr-web audit --url=https://coui.cocode.im --depth=2
# Verify Web vs Flutter parity on the live-preview page
/jaspr-web match --url=https://coui.cocode.im/live-preview-poc
# Drive a local debug Flutter Web Widgetbook + the surrounding Jaspr page
/jaspr-web widgetbook-web --port=8080Required Inputs#
| Subcommand | Required | Optional |
|---|---|---|
setup | โ | โ |
audit | --url | --depth, --selector-catalogue, --include, --exclude |
match | --url | --tolerance, --variants, --output |
widgetbook-web | --port | --routes, --marionette-uri |
regression | --routes | --baseline-dir, --tolerance |
Browser Selection#
The playwright MCP is the default for all subcommands. Force chrome-devtools instead with --mcp=chrome-devtools when you need:
- Sharper CSS variable inspection.
- Performance traces.
- Native Chrome accessibility tree.
Output#
.claude/docs/jaspr-web/<run_id>/ โ see skills/jaspr-web/SKILL.md for the schema.
Related#
- Skill:
cc-jaspr-web:jaspr-web - Companion:
cc-jaspr-web:live-preview-match - Native counterpart:
cc-flutter-pixel-loop:pixel-loop - Debug-mode Flutter Web drive:
cc-flutter-marionette:marionette