@primevue/mcp and @quasar/mcp understand component code. They do not render pixels. This skill uses the Playwright MCP (@playwright/mcp) so the agent can see the live Vite page and fix what it sees.
Do not use Puppeteer or @modelcontextprotocol/server-puppeteer.
@visual-auditor still records the done review (contrast report, widths, fix log). Run this loop first, while the dev server is hot, and correct the code before that review.
When the agent activates this skill
- After any major UI component, layout change, or dashboard view.
- After
@motion-physicson a GUI surface. - When checking a mobile drawer against the desktop layout.
- When contrast, overlap, or an unwanted scrollbar is in question.
Do not use this skill for a CLI. Terminal alignment is @cli-interface-design (run the script, read stdout).
Feedback cycle
1. Agent writes Vue code to file
2. Vite dev server (localhost:5173) hot-reloads
3. browser_navigate, then browser_resize, then browser_take_screenshot
4. Agent inspects the rendered image
5. Agent fixes the flaw in code
Repeat until the screenshot has no overlap, broken wrap, misaligned padding, or raw unstyled type. Then stop. Do not declare the GUI task complete on an unread screenshot.
MCP server
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@latest"]
}
}
}
Commands
The dev server must already be running at http://localhost:5173.
- Navigate. Hash routes stay on
#/…. History routes use the path with no hash.
browser_navigate
url: http://localhost:5173/#/dashboard
- Resize, then screenshot. Repeat for both viewports.
browser_take_screenshotdoes not take width and height.browser_resizedoes.
| Surface | width | height | filename |
|---|---|---|---|
| Desktop | 1440 | 900 | .heyeddi/docs/visual-verification/dashboard-desktop.png |
| Mobile (iPhone 14) | 390 | 844 | .heyeddi/docs/visual-verification/dashboard-mobile.png |
browser_resize
width: 1440
height: 900
browser_take_screenshot
filename: .heyeddi/docs/visual-verification/dashboard-desktop.png
scale: css
fullPage: true
Then the same pair at 390×844 with dashboard-mobile.png.
-
Read the saved PNG. Look for overlap, broken flex wrap, padding that does not match the token scale, unstyled fonts, and horizontal scroll that the layout did not intend.
-
Edit the Vue or CSS. Wait for HMR. Screenshot again. One fix round is the default. A second round only if the first screenshot still shows a defect.
browser_snapshot is the accessibility tree. Use it to find a control. Use browser_take_screenshot when the question is visual.
Instructions
- Confirm
http://localhost:5173responds. If it does not, start the Vite server the project already uses, then navigate. - Capture desktop and mobile before calling the screen done.
- Fix code. Do not answer with a list of flaws and leave them.
@visual-auditorruns after this loop when the pipeline asks for a recorded review. Do not skip that gate by treating this screenshot as the audit file.
When the task is complete: suggest next skills
When you have finished the user's request for this skill, suggest what to run next:
-
Run:
python .agents/skills/heyeddi/scripts/suggest_next_skill.py --current-skill visual-verification --project-root . -
Include the script's
### Next stepblock in your final reply.