Reviews all frontend elements (UI, UX, accessibility, visual design, responsiveness, performance, visual QA from screenshots) using an agent team with 4 domain-specialized reviewers. Creates Linear issues in Backlog state for findings. Use when user says "review frontend", "check UI", "review UX", "audit accessibility", "check responsive", or "review screens". Falls back to single-agent mode if agent teams unavailable.
Review all frontend elements using an agent team with domain-specialized reviewers. You are the team lead/coordinator. You orchestrate 4 reviewer teammates who examine the frontend through different lenses in parallel, then you merge findings, create Linear issues, and output a summary report.
If agent teams are unavailable (TeamCreate fails), fall back to single-agent mode — see "Fallback: Single-Agent Mode" section.
Reference: See references/frontend-checklist.md for the comprehensive checklist and references/reviewer-prompts.md for domain-specific reviewer instructions.
mcp__linear__list_teams. If unavailable, STOP and tell the user: "Linear MCP is not connected. Run /mcp to reconnect, then re-run this skill."mcp__linear__list_teams to discover the teamsrc/app/**/page.tsx — Pagessrc/app/**/layout.tsx — Layoutssrc/components/**/*.tsx — Componentssrc/hooks/**/*.ts — Custom hookssrc/app/globals.css — Stylespublic/manifest.json — PWA manifestmiddleware.ts — MiddlewareUse Task tool with subagent_type "verifier" with prompt "e2e"
e2e/screenshots/*.pnge2e/screenshots/*.png. Build the screenshot list for the visual-qa-reviewer.$ARGUMENTS specifies an area → scope files and screenshots to that area onlyUse TeamCreate:
team_name: "frontend-review"description: "Parallel frontend review with domain-specialized reviewers"If TeamCreate fails, switch to Fallback: Single-Agent Mode (see below).
Use TaskCreate to create 4 review tasks (or 3 if screenshots unavailable):
Use the Task tool with team_name: "frontend-review", subagent_type: "general-purpose", and model: "sonnet" to spawn each reviewer. Spawn all reviewers in parallel (concurrent Task calls in one message).
Each reviewer prompt MUST include:
After spawning, use TaskUpdate to assign each task to its reviewer by name.
While waiting for reviewer messages:
TaskListIf a reviewer gets stuck or stops without reporting: Send them a message asking for their findings. If they don't respond, note that domain as "incomplete".
Once all reviewer findings are collected:
| Severity | Criteria | Examples | |----------|----------|---------| | CRITICAL | Blocks usage for some users entirely | Missing keyboard navigation on core flow, zero-contrast text, broken responsive layout on mobile | | HIGH | Significant UX degradation or accessibility barrier | Missing ARIA labels on interactive elements, no focus indicators, touch targets below 44px, missing loading states, LCP > 4s, visually broken layout | | MEDIUM | Noticeable but not blocking | Inconsistent spacing, minor contrast issues on non-critical text, missing skip links, CLS > 0.1, visual misalignment | | LOW | Polish and best-practice improvements | Inconsistent border radius, missing hover transitions, suboptimal image format, minor visual rhythm issues |
After merging and deduplicating, create a Linear issue for each finding using mcp__linear__create_issue:
team: [discovered team name]
state: "Backlog"
title: "[Brief description of the issue]"
description: (see Issue Description Format below)
priority: [1|2|3|4] (mapped from severity)
labels: [Mapped label(s)]
Issue Description Format:
**Problem:**
[Clear, specific problem statement — 1-2 sentences]
**Context:**
[Affected file paths with line numbers, e.g. `src/components/food-analyzer.tsx:45-60`]
[For visual QA findings: reference which screenshot(s) show the issue, e.g. "Visible in e2e/screenshots/dashboard.png"]
**Impact:**
[Who is affected and how — e.g. screen reader users, mobile users, slow connections]
**Fix:**
[Specific remediation steps — what needs to change]
**Acceptance Criteria:**
- [ ] [Specific, verifiable criterion — e.g. "All interactive elements have visible focus indicators"]
- [ ] [Another criterion]
Severity → Priority Mapping:
Label Mapping:
| Domain | Linear Label | |--------|-------------| | Accessibility issues, semantic HTML, ARIA | Bug | | Visual design, UX, responsive layout | Improvement | | Visual QA (layout, composition, consistency) | Improvement | | Performance, Core Web Vitals, bundle | Performance | | Convention (CLAUDE.md compliance) | Convention |
Rules:
After all Linear issues are created:
SendMessage with type: "shutdown_request"TeamDelete to remove team resourcesIf TeamCreate fails, perform the review as a single agent:
| Situation | Action |
|-----------|--------|
| Linear MCP not connected | STOP — tell user to run /mcp |
| No frontend files found | Stop — "No frontend files found in scope." |
| CLAUDE.md doesn't exist | Use general best practices |
| TeamCreate fails | Switch to single-agent fallback mode |
| E2E tests fail | Warn user, skip visual-qa-reviewer, proceed with 3 code reviewers |
| No screenshots found | Skip visual-qa-reviewer, proceed with 3 code reviewers |
| Reviewer stops without reporting | Send follow-up message, note domain as incomplete |
| Focus area doesn't match any files | Stop — "No files match the specified area." |
Output this report and STOP:
## Frontend Review Report
**Team:** 4 reviewers (accessibility, visual-design, performance, visual-qa)
[OR: **Team:** 3 reviewers (accessibility, visual-design, performance) — visual QA skipped (no screenshots)]
[OR: **Mode:** single-agent (team unavailable)]
**Scope:** [all frontend files | specific area]
**Files reviewed:** N
**Screenshots analyzed:** M [or "0 (skipped)"]
### Issues (ordered by priority)
| # | ID | Priority | Label | Title |
|---|-----|----------|-------|-------|
| 1 | PROJ-N1 | High | Bug | Brief title |
| 2 | PROJ-N2 | Medium | Improvement | Brief title |
| ... | ... | ... | ... | ... |
X issues total | Duplicates merged: M
Next step: Review Backlog in Linear and use `plan-backlog` to create implementation plans.
Do not ask follow-up questions. Do not offer to fix issues.
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer