Skip to content

/craft-analyze

Post-cycle analysis — QA, UX, Creative, and Style audits using MCP browser tools.

From plugin
craft
7377 skills27 agents77 commands7 hooks
+1
> /plugin marketplace add drobins25/craft
> /plugin install craft@craft

Command definition

craft-analyze.md
name: analyze
description: "Post-cycle analysis — QA, UX, Creative, and Style audits using MCP browser tools."

Analyze

Run comprehensive analysis on what you've built. Findings persist between sessions — nothing gets lost.

Analysis Types

| Type | Agent | Finds | |------|-------|-------| | **QA** | qa-analyzer | Bugs, errors, edge cases | | **UX** | ux-analyzer | Friction, accessibility, heuristic violations | | **Creative** | creative-analyzer | Delight opportunities, feature ideas | | **Style** | style-analyzer | Token violations, pattern drift | | **Walkthrough** | walkthrough-analyzer | "Does it actually work for a human?" - clicks everything, checks every state |

QA and Walkthrough file the defects they find as bugs in `.craft/bugs/`. UX, Creative, and Style queue their findings for review.

Flow

Step 1: Check Pending Findings

Before any new analysis, check for existing pending findings of the requested type. Only UX, Creative, and Style keep a pending queue (`.craft/analysis/pending/ux.yaml`, `creative.yaml`, `style.yaml`). A QA or Walkthrough request skips this step and goes to Step 2, since their defects are filed as bugs and nothing queues.

**If pending findings exist:**

> "You have [N] pending [type] findings from [date]: > > **Critical/High:** [count] > **Medium:** [count] > **Low:** [count] > > What would you like to do?"

Use **AskUserQuestion**:

question: "What would you like to do with pending findings?"
header: "Pending"
options:
  - label: "Review pending findings now"
    description: "Go through existing findings before new analysis"
  - label: "Continue analysis (keep pending)"
    description: "Run new analysis, existing findings stay queued"
  - label: "Clear pending and start fresh"
    description: "Dismiss old findings, start new analysis"

**If user provides custom text:** Ask a clarifying AskUserQuestion before proceeding.

**If user chooses "Review pending"** → Go to Step 5 (Review Findings)

**If user chooses "Continue" or "Clear"** → Proceed to Step 2

Step 2: Select Analysis Type

> "What kind of analysis?"

Use **AskUserQuestion**:

question: "What kind of analysis?"
header: "Type"
options:
  - label: "QA Pass"
    description: "Find bugs and errors"
  - label: "UX Insights"
    description: "Usability and accessibility review"
  - label: "Creative Exploration"
    description: "Find delight opportunities"
  - label: "Style Audit"
    description: "Design consistency check"
  - label: "Walkthrough"
    description: "Click everything in the live app, report what doesn't feel right"

**Note:** "Full Analysis" runs all types sequentially. If user selects "Other" and mentions "full" or "all", run all types.

**If user provides custom text:** Ask a clarifying AskUserQuestion to confirm which analysis type(s) they want.

Step 3: Select Scope

**Resolve the cycle first.** Read `ACTIVE_CYCLE` from `$PROJECT/.craft/.global-state` and take the title from that cycle's `cycle.yaml`. When `ACTIVE_CYCLE` is empty (a cycle just closed), look up the last completed cycle:

bash "${CLAUDE_PLUGIN_ROOT}/hooks/scripts/get-latest-cycle.sh" "$PROJECT" --status=complete

Its `CYCLE_TITLE` is the title. When that comes back empty too, there is no cycle.

> "What should I analyze?"

Use **AskUserQuestion**:

question: "What should I analyze?"
header: "Scope"
options:
  - label: "Current cycle"
    description: "All stories in <title>"
  - label: "Specific story"
    description: "Pick one story from the cycle"
  - label: "Specific pages"
    description: "I'll specify which pages/URLs"
  - label: "Whole application"
    description: "Full app analysis"

The first option reads `Current cycle` when a cycle is active, `Last completed cycle (<title>)` when only a completed one exists, and is omitted when neither exists. "Specific story" picks from that same resolved cycle.

The confirmed scope yields two values the later steps use:

  • **SCOPE** - the user's words for pages or areas, a story title, `the whole application`, or `all stories in <Cycle N>` for the cycle option (`<Cycle N>` is the title's text before its first colon when it starts with "Cycle ", else the full title)
  • **CYCLE_RELATION** - `active` when the scope is tied to the active cycle, `after` when it is tied to the last completed cycle, `none` otherwise

**If user provides custom text:** Ask a clarifying AskUserQuestion to confirm the scope.

**If user selects "Specific pages":**

Use **AskUserQuestion**:

question: "Which pages should I analyze?"
header: "Pages"
options:
  - label: "[Known page 1]"
    description: "Based on project structure"
  - label: "[Known page 2]"
  - label: "[Known page 3]"

**If scope is ambiguous or Claude is unsure:**

Use **AskUserQuestion**:

question: "I want to make sure I analyze the right things. Can you confirm?"
header: "Clarify"
options:
  - label: "[Option based on understanding]"
  - label: "[Alternative interpretation]"
  - label: "Let me explain differently"

**IMPORTANT:** Always confirm scope before running analysis. If uncertain about:

  • Which URLs to visit
  • Which components to inspect
  • What user flows to test
  • What the acceptance criteria mean

Ask first. Don't assume.

Step 4: Run Analysis

**Check MCP availability first.** Chrome-devtools MCP should be available — the Craft plugin bundles it automatically.

If chrome-devtools MCP tools are not available:

> "Chrome DevTools MCP should be available through the Craft plugin, but I'm not seeing it. > > Try restarting Claude Code (`exit` then `claude`) to reload the plugin's MCP servers. > > Then run `/craft:analyze` again."

**If MCP is available**, **INVOKE the appropriate analyzer agent using the Task tool**:

  • QA analysis: `craft:qa-analyzer`
  • UX analysis: `craft:ux-analyzer`
  • Creative analysis: `craft:creative-analyzer`
  • Style analysis: `craft:style-analyzer`
  • Walkthrough: `craft:walkthrough-analyzer`

Pass the confirmed scope a

Read more
@drobins25
Ships withcraft

Stop Vibing. Start Crafting.

7311 skills27 agents1 MCP
Get the whole plugin, auto-invoked

Stars on GitHub

Momentum

stars in total
73
Star history of drobins25/craft on GitHub, a chart by star-history.com

Other commands on craft.

craft-annotate
Auto-invoked

craft-annotate

Command

Point at anything in a live browser tab - every pin gets a live attempt on the page the moment you SEND it, and the session keeps…

@drobins25@drobins25Install Command
craft-ask
Auto-invoked

craft-ask

Command

Consult a craft agent. Routes your question to the best mind in the workshop - not a menu, a recommendation.

@drobins25@drobins25Install Command
craft-become
Auto-invoked

craft-become

Command

Agent crystallization command. Studies a tool, role, or person and produces a portable 9-section agent that inhabits the domain -…

@drobins25@drobins25Install Command
craft-bugs
Auto-invoked

craft-bugs

Command

File a bug without fixing it, from a person mid-conversation or an agent mid-run. One door, a complete record on disk, nobody…

@drobins25@drobins25Install Command

More commands from other plugins.

build
Auto-invoked

build

Command

Implement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.

@addyosmani@addyosmaniInstall Command