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.
Pre-flight
- Verify Linear MCP — Call
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."
- Discover project info from CLAUDE.md — Read the LINEAR INTEGRATION section to find:
- Team name (e.g., "ProjectName")
- Issue prefix (e.g., PROJ-xxx)
- If LINEAR INTEGRATION section not found, call
mcp__linear__list_teams to discover the team
- Read CLAUDE.md — Load project standards, tech stack, and conventions
- Discover frontend file patterns from CLAUDE.md — Look for the STRUCTURE section to find frontend file patterns. Common patterns include:
src/app/**/page.tsx — Pages
src/app/**/layout.tsx — Layouts
src/components/**/*.tsx — Components
src/hooks/**/*.ts — Custom hooks
src/app/globals.css — Styles
public/manifest.json — PWA manifest
middleware.ts — Middleware
- If STRUCTURE section not found, use common Next.js/React conventions
- Generate fresh screenshots — Run E2E tests to produce up-to-date screenshots:
Use Task tool with subagent_type "verifier" with prompt "e2e"
- If E2E tests pass: screenshots are now available at
e2e/screenshots/*.png
- If E2E tests fail: warn the user, skip the visual-qa-reviewer (spawn only 3 code reviewers), note in the report that visual QA was skipped
- Discover frontend files — Use Glob to find all frontend-related files using the patterns discovered in step 4
- Discover screenshots — Use Glob to find
e2e/screenshots/*.png. Build the screenshot list for the visual-qa-reviewer.
- Determine review scope:
- If
$ARGUMENTS specifies an area → scope files and screenshots to that area only
- If no arguments → review all frontend files and all screenshots
- Build the file list — Create the exact list of files each code reviewer will examine, and the screenshot list for the visual-qa-reviewer
Team Setup
Create the team
Use TeamCreate:
team_name: "frontend-review"
description: "Parallel frontend review with domain-specialized reviewers"
If TeamCreate fails, switch to Fallback: Single-Agent Mode (see below).
Create tasks
Use TaskCreate to create 4 review tasks (or 3 if screenshots unavailable):
- "Accessibility & semantics review" — WCAG compliance, ARIA, semantic HTML, keyboard nav, screen readers
- "Visual design & UX review" — Design consistency, layout, responsive design, mobile UX, user flows (code-level)
- "Performance & optimization review" — Core Web Vitals, images, bundle, Server/Client components, PWA
- "Visual QA review" — Screenshot-based analysis of rendered screens (skip if no screenshots)
Spawn reviewer teammates
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:
- The common preamble and their domain checklist from references/reviewer-prompts.md
- Code reviewers (1-3): The exact list of files to review
- Visual QA reviewer (4): The exact list of screenshot paths to read with the Read tool
- Instructions to report findings as a structured message to the lead
Assign tasks
After spawning, use TaskUpdate to assign each task to its reviewer by name.
Coordination
While waiting for reviewer messages:
- Reviewer messages are automatically delivered — do NOT poll or manually check inbox
- Teammates go idle after each turn — this is normal, not an error. They're done when they send their findings message.
- Track progress via
TaskList
- Acknowledge receipt as each reviewer reports
- Wait until ALL reviewers have reported before proceeding to merge
If 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".
Merge & Evaluate Findings
Once all reviewer findings are collected:
Deduplicate
- Same component/element reported by multiple reviewers → merge into the one with higher priority
- Same root cause across multiple locations → combine into one finding
- Visual QA findings that overlap with code-level visual-design findings → merge, keeping the screenshot evidence reference
Evaluate Severity
| 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 |
Create Linear 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:
- CRITICAL → 1 (Urgent)
- HIGH → 2 (High)
- MEDIUM → 3 (Medium)
- LOW → 4 (Low)
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:
- Include file paths with line numbers in Context
- For visual QA findings, reference the screenshot filename(s) showing the issue
- Acceptance criteria define "done" — verifiable conditions
- One issue per distinct finding
Shutdown Team
After all Linear issues are created:
- Send shutdown requests to all reviewers using
SendMessage with type: "shutdown_request"
- Wait for shutdown confirmations
- Use
TeamDelete to remove team resources
Fallback: Single-Agent Mode
If TeamCreate fails, perform the review as a single agent:
- Inform user: "Agent teams unavailable. Running frontend review in single-agent mode."
- Read each frontend file in the review scope
- Apply all domain checks sequentially using references/frontend-checklist.md:
a. Accessibility & semantics checks
b. Visual design & UX checks (code-level)
c. Performance & optimization checks
d. Visual QA checks — read each screenshot and apply the Visual QA checklist
- Merge, deduplicate, and create Linear issues — same process as team mode
Error Handling
| 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." |
Rules
- Analysis only — Do NOT modify any source code
- Be specific — Include file paths and line numbers for every finding
- Include remediation — Every finding must have a concrete fix suggestion
- Prioritize impact — Focus on issues that affect real users
- Test don't assume — Read the actual code, don't guess about implementations
- Lead handles all Linear writes — Reviewers NEVER create issues directly
- Deduplicate before creating — No duplicate issues in Linear
- Screenshots are transient — They are gitignored and regenerated each run. Reference them by filename in issue descriptions for context, but don't depend on them persisting.
Termination
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.
1---2name: frontend-review3description: 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.4---56Review 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.78**If agent teams are unavailable** (TeamCreate fails), fall back to single-agent mode — see "Fallback: Single-Agent Mode" section.910**Reference:** See [references/frontend-checklist.md](references/frontend-checklist.md) for the comprehensive checklist and [references/reviewer-prompts.md](references/reviewer-prompts.md) for domain-specific reviewer instructions.1112## Pre-flight13141. **Verify Linear MCP** — Call `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."152. **Discover project info from CLAUDE.md** — Read the LINEAR INTEGRATION section to find:16 - Team name (e.g., "ProjectName")17 - Issue prefix (e.g., PROJ-xxx)18 - If LINEAR INTEGRATION section not found, call `mcp__linear__list_teams` to discover the team193. **Read CLAUDE.md** — Load project standards, tech stack, and conventions204. **Discover frontend file patterns from CLAUDE.md** — Look for the STRUCTURE section to find frontend file patterns. Common patterns include:21 - `src/app/**/page.tsx` — Pages22 - `src/app/**/layout.tsx` — Layouts23 - `src/components/**/*.tsx` — Components24 - `src/hooks/**/*.ts` — Custom hooks25 - `src/app/globals.css` — Styles26 - `public/manifest.json` — PWA manifest27 - `middleware.ts` — Middleware28 - If STRUCTURE section not found, use common Next.js/React conventions295. **Generate fresh screenshots** — Run E2E tests to produce up-to-date screenshots:30 ```31 Use Task tool with subagent_type "verifier" with prompt "e2e"32 ```33 - If E2E tests pass: screenshots are now available at `e2e/screenshots/*.png`34 - If E2E tests fail: warn the user, skip the visual-qa-reviewer (spawn only 3 code reviewers), note in the report that visual QA was skipped356. **Discover frontend files** — Use Glob to find all frontend-related files using the patterns discovered in step 4367. **Discover screenshots** — Use Glob to find `e2e/screenshots/*.png`. Build the screenshot list for the visual-qa-reviewer.378. **Determine review scope:**38 - If `$ARGUMENTS` specifies an area → scope files and screenshots to that area only39 - If no arguments → review all frontend files and all screenshots409. **Build the file list** — Create the exact list of files each code reviewer will examine, and the screenshot list for the visual-qa-reviewer4142## Team Setup4344### Create the team4546Use `TeamCreate`:47- `team_name`: "frontend-review"48- `description`: "Parallel frontend review with domain-specialized reviewers"4950**If TeamCreate fails**, switch to Fallback: Single-Agent Mode (see below).5152### Create tasks5354Use `TaskCreate` to create 4 review tasks (or 3 if screenshots unavailable):55561. **"Accessibility & semantics review"** — WCAG compliance, ARIA, semantic HTML, keyboard nav, screen readers572. **"Visual design & UX review"** — Design consistency, layout, responsive design, mobile UX, user flows (code-level)583. **"Performance & optimization review"** — Core Web Vitals, images, bundle, Server/Client components, PWA594. **"Visual QA review"** — Screenshot-based analysis of rendered screens (skip if no screenshots)6061### Spawn reviewer teammates6263Use 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).6465Each reviewer prompt MUST include:66- The common preamble and their domain checklist from [references/reviewer-prompts.md](references/reviewer-prompts.md)67- Code reviewers (1-3): The **exact list of files** to review68- Visual QA reviewer (4): The **exact list of screenshot paths** to read with the Read tool69- Instructions to report findings as a structured message to the lead7071### Assign tasks7273After spawning, use `TaskUpdate` to assign each task to its reviewer by name.7475## Coordination7677While waiting for reviewer messages:781. Reviewer messages are **automatically delivered** — do NOT poll or manually check inbox792. Teammates go idle after each turn — this is normal, not an error. They're done when they send their findings message.803. Track progress via `TaskList`814. Acknowledge receipt as each reviewer reports825. Wait until ALL reviewers have reported before proceeding to merge8384**If 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".8586## Merge & Evaluate Findings8788Once all reviewer findings are collected:8990### Deduplicate91- Same component/element reported by multiple reviewers → merge into the one with higher priority92- Same root cause across multiple locations → combine into one finding93- Visual QA findings that overlap with code-level visual-design findings → merge, keeping the screenshot evidence reference9495### Evaluate Severity9697| Severity | Criteria | Examples |98|----------|----------|---------|99| **CRITICAL** | Blocks usage for some users entirely | Missing keyboard navigation on core flow, zero-contrast text, broken responsive layout on mobile |100| **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 |101| **MEDIUM** | Noticeable but not blocking | Inconsistent spacing, minor contrast issues on non-critical text, missing skip links, CLS > 0.1, visual misalignment |102| **LOW** | Polish and best-practice improvements | Inconsistent border radius, missing hover transitions, suboptimal image format, minor visual rhythm issues |103104## Create Linear Issues105106After merging and deduplicating, create a Linear issue for each finding using `mcp__linear__create_issue`:107108```109team: [discovered team name]110state: "Backlog"111title: "[Brief description of the issue]"112description: (see Issue Description Format below)113priority: [1|2|3|4] (mapped from severity)114labels: [Mapped label(s)]115```116117**Issue Description Format:**118119```120**Problem:**121[Clear, specific problem statement — 1-2 sentences]122123**Context:**124[Affected file paths with line numbers, e.g. `src/components/food-analyzer.tsx:45-60`]125[For visual QA findings: reference which screenshot(s) show the issue, e.g. "Visible in e2e/screenshots/dashboard.png"]126127**Impact:**128[Who is affected and how — e.g. screen reader users, mobile users, slow connections]129130**Fix:**131[Specific remediation steps — what needs to change]132133**Acceptance Criteria:**134- [ ] [Specific, verifiable criterion — e.g. "All interactive elements have visible focus indicators"]135- [ ] [Another criterion]136```137138**Severity → Priority Mapping:**139- CRITICAL → 1 (Urgent)140- HIGH → 2 (High)141- MEDIUM → 3 (Medium)142- LOW → 4 (Low)143144**Label Mapping:**145146| Domain | Linear Label |147|--------|-------------|148| Accessibility issues, semantic HTML, ARIA | Bug |149| Visual design, UX, responsive layout | Improvement |150| Visual QA (layout, composition, consistency) | Improvement |151| Performance, Core Web Vitals, bundle | Performance |152| Convention (CLAUDE.md compliance) | Convention |153154**Rules:**155- Include file paths with line numbers in Context156- For visual QA findings, reference the screenshot filename(s) showing the issue157- Acceptance criteria define "done" — verifiable conditions158- One issue per distinct finding159160## Shutdown Team161162After all Linear issues are created:1631. Send shutdown requests to all reviewers using `SendMessage` with `type: "shutdown_request"`1642. Wait for shutdown confirmations1653. Use `TeamDelete` to remove team resources166167## Fallback: Single-Agent Mode168169If `TeamCreate` fails, perform the review as a single agent:1701711. **Inform user:** "Agent teams unavailable. Running frontend review in single-agent mode."1722. Read each frontend file in the review scope1733. Apply all domain checks sequentially using [references/frontend-checklist.md](references/frontend-checklist.md):174 a. Accessibility & semantics checks175 b. Visual design & UX checks (code-level)176 c. Performance & optimization checks177 d. Visual QA checks — read each screenshot and apply the Visual QA checklist1784. Merge, deduplicate, and create Linear issues — same process as team mode179180## Error Handling181182| Situation | Action |183|-----------|--------|184| Linear MCP not connected | STOP — tell user to run `/mcp` |185| No frontend files found | Stop — "No frontend files found in scope." |186| CLAUDE.md doesn't exist | Use general best practices |187| TeamCreate fails | Switch to single-agent fallback mode |188| E2E tests fail | Warn user, skip visual-qa-reviewer, proceed with 3 code reviewers |189| No screenshots found | Skip visual-qa-reviewer, proceed with 3 code reviewers |190| Reviewer stops without reporting | Send follow-up message, note domain as incomplete |191| Focus area doesn't match any files | Stop — "No files match the specified area." |192193## Rules194195- **Analysis only** — Do NOT modify any source code196- **Be specific** — Include file paths and line numbers for every finding197- **Include remediation** — Every finding must have a concrete fix suggestion198- **Prioritize impact** — Focus on issues that affect real users199- **Test don't assume** — Read the actual code, don't guess about implementations200- **Lead handles all Linear writes** — Reviewers NEVER create issues directly201- **Deduplicate before creating** — No duplicate issues in Linear202- **Screenshots are transient** — They are gitignored and regenerated each run. Reference them by filename in issue descriptions for context, but don't depend on them persisting.203204## Termination205206Output this report and STOP:207208```209## Frontend Review Report210211**Team:** 4 reviewers (accessibility, visual-design, performance, visual-qa)212[OR: **Team:** 3 reviewers (accessibility, visual-design, performance) — visual QA skipped (no screenshots)]213[OR: **Mode:** single-agent (team unavailable)]214**Scope:** [all frontend files | specific area]215**Files reviewed:** N216**Screenshots analyzed:** M [or "0 (skipped)"]217218### Issues (ordered by priority)219220| # | ID | Priority | Label | Title |221|---|-----|----------|-------|-------|222| 1 | PROJ-N1 | High | Bug | Brief title |223| 2 | PROJ-N2 | Medium | Improvement | Brief title |224| ... | ... | ... | ... | ... |225226X issues total | Duplicates merged: M227228Next step: Review Backlog in Linear and use `plan-backlog` to create implementation plans.229```230231Do not ask follow-up questions. Do not offer to fix issues.