craft-analyze
Post-cycle analysis — QA, UX, Creative, and Style audits using MCP browser tools.
This file is read by parent commands (cycle-design, story-new) that need to run content-spark logic inline instead of via nested Skill invocation. The standalone `/craft:content-spark` skill reads this same file.
> /plugin marketplace add drobins25/craft > /plugin install craft@craft
How it fires
How this command gets triggered: by you, by Claude, or both.
/content-spark-inlineContext preview
What this command does when you run it.
This file is read by parent commands (cycle-design, story-new) that need to run content-spark logic inline instead of via nested Skill invocation. The standalone `/craft:content-spark` skill reads this same file.
This file is read by parent commands (cycle-design, story-new) that need to run content-spark logic inline instead of via nested Skill invocation. The standalone `/craft:content-spark` skill reads this same file.
After a story spark is captured but before creative-spark or plan-chunks. The story must have a `## Spark` section.
Read the story file. Extract the `## Spark` section content.
If the story already has a populated `## Content Direction` section (non-empty, non-comment text after the heading):
Use **AskUserQuestion**:
question: "This story already has content direction. What would you like to do?"
header: "Content"
options:
- label: "Keep it"
description: "Content direction is good - proceed to next step"
- label: "Revise it"
description: "Re-run the content checkpoint to update direction"**If "Keep it":** Content-spark is done. Continue the parent flow. **If "Revise it":** Continue to Phase 2.
If no Content Direction exists, continue to Phase 2.
Read the spark and classify each of the five content dimensions as **Resolved** or **Assumed**.
| Dimension | What it covers | Resolved when... | |-----------|---------------|-------------------| | **Display content** | What data, features, or items are shown | Spark explicitly names the content items, data sources, or feature list | | **Narrative arc** | What story the feature tells, what's the user flow | Spark describes the journey, sequence, or progression | | **Copy direction** | Headlines, labels, empty states, error messages, tone | Spark specifies wording, tone, or references a voice/style | | **Data shape** | What's real vs. mock, what fields matter, what's dynamic | Spark names specific data fields, sources, or formats | | **Priority/hierarchy** | What's prominent vs. secondary, what's above the fold | Spark ranks importance, names the hero element, or describes visual weight |
**Classification rules:**
Be honest about what's resolved vs. assumed. The value is revealing what the system would otherwise guess silently.
Classify which implementation risks apply. These tags tell plan-chunks what acceptance criteria to generate - each tag is translated into criteria that name the implementation mechanism.
| Tag | Apply ONLY when... | |-----|---------------------| | `has-variants` | The spark names specific sizes or the component renders at multiple dimensions. Visual properties use absolute pixel values that won't scale. | | `has-data-pipeline` | The story adds or modifies data fields that pass through schemas/validators, OR uses APIs that behave differently across environments. Must actually CHANGE the data shape. | | `has-animation` | The spark explicitly describes keyframes, transitions, multi-phase animation sequences, or opacity changes through blend modes. | | `has-touch-targets` | The spark describes interactive elements with explicit pixel dimensions below 44px, or text inputs with font-size below 16px. | | `diverges-from-existing` | The spark uses "use X instead of Y" language where the codebase currently does Y, AND an implementer reading existing code would naturally follow the wrong pattern. |
Most stories should get 1-2 tags. Zero is valid for pure logic/config/doc changes.
Count the number of **Assumed** dimensions.
**If <2 assumptions:** The content is well-specified. Write the Content Direction section (Phase 5) with the resolved answers and any single noted gap. Content-spark is done - continue the parent flow.
**If >=2 assumptions:** Continue to Phase 4 to surface each assumption.
Present the analysis summary:
> "Looking at the spark, here's what I see: > > **Resolved** (I know what to build): > - [Dimension]: [evidence from spark] > > **Assumed** (I'd have to guess): > - [Dimension]: [what I'd assume and why] > > Let me check each assumption with you."
Surface each assumption **individually** via AskUserQuestion, ordered by impact:
question: "[Dimension name]: [System's best guess]. Does this match your intent?"
header: "[Short dimension label]"
options:
- label: "Yes, that's right"
description: "Lock in this direction"
- label: "Close, but..."
description: "Adjust the direction"
- label: "No, here's what I want"
description: "Replace with your vision"If user provides custom text, use their exact words. Do not paraphrase.
Write `## Content Direction` to the story file after `## Spark` and before `## Visual Direction` or `## Decisions`.
Only include dimensions that add value beyond what the spark already says. If all dimensions are obvious:
## Content Direction Content is well-specified in the spark. No additional direction needed.
Also write `## Risk Tags`:
## Risk Tags ```yaml risk_tags: - has-variants # [mechanism or cited locked rule; thresholds only as verification]
<!-- These tags are read by plan-chunks to generate acceptance criteria that name the implementation mechanism. -->
**Risk Tag Authoring Rule** (short form - canonical statement lives in `skills/plan-chunks/references/chunk-format-guide.md`, section `Risk Tag Authoring Rule`): each tag's `#` comment must name the implementation mechanism or cite a project locked rule. A numeric threshold may appear ONLY as a verification criterion attached to a mechanism, never as the implementation instruction. A bare threshold gets implemented literally. - Wrong: `- has-touch-targets # must stay >=44px` - Right: `- has-touch-targets # hit area extended via padding/pseudo-elemen
Stop Vibing. Start Crafting. A Claude Code plugin that acts as an intelligent harness for your development workflow: your codebase is read-only by default, every change passes through a Write Gate as planned and approved work, and craft tracks your project's
Repo: drobins25/craft
Post-cycle analysis — QA, UX, Creative, and Style audits using MCP browser tools.
Consult a craft agent. Routes your question to the best mind in the workshop - not a menu, a recommendation.
Agent crystallization command. Studies a tool, role, or person and produces a portable 9-section agent that inhabits the domain - with beliefs, scar tissue,…
Complete a cycle. Triggers reflection if pending learnings, then archives.
Design a cycle — create new cycles with planned stories, detail existing planning cycles, or quick-sketch a roadmap. Detects planning docs in .craft/planning/…