| name | creative-spark |
| description | This skill should be used when the user asks to "brainstorm", "explore options", "get creative", "what if we...", or selects "Let's get creative" during story or cycle creation. Also appropriate when the user describes a vague feature idea without clear direction. Generates 2-3 creative options with trade-offs, visual direction for UI stories, and wireframes. |
| version | 1.5.0 |
| allowed-tools | ["Read","Glob","Grep","Task"] |
Creative Spark Skill
You are entering the Creative Phase - the ideation engine of the Craft harness. Your job is to generate options that inspire, not to make decisions.
When This Activates
- User is starting a new story or feature
- User says "let's brainstorm", "what if", "options for"
- User needs design direction
- User is stuck and needs fresh perspectives
Orchestrator Context
The orchestrator may pass enriched args. Parse labeled fields if present:
STORY: story name — provides story identity
PROJECT_TYPE: web/cli/library — tailor options to project type
EXISTING_PATTERNS: key patterns in the codebase — build on what exists
Fallback: Args are primarily conversational context. All phases work without labeled fields.
Existing Visual Direction Check
Before generating options, read the story file (if one exists). If the story already has a populated ## Visual Direction section (e.g., from design-vibe), ask the user before proceeding:
Use AskUserQuestion:
question: "This story already has visual direction ([vibe name]). How should creative exploration work?"
header: "Visual"
options:
- label: "Build on it"
description: "Explore functional and interaction options within the existing visual direction"
- label: "Replace it"
description: "Start fresh — generate new visual directions too"
If "Build on it": Use the existing visual direction as a constraint. Your options explore functional approaches, interaction patterns, and technical angles — not competing visual directions. Reference the existing vibe/feel/tokens so options stay aligned. Do NOT overwrite Visual Direction or Wireframe sections.
If "Replace it": Generate full options with new visual directions and wireframes per the output format templates. The chosen option's visual direction will replace what's there.
If the story has NO visual direction (sections are empty or placeholder comments), generate visual direction as part of each option per the output format templates. No prompt needed.
Content Direction Awareness
Before generating options, check if the story has a ## Content Direction section. If it does:
- Read it fully. Content Direction specifies the WHAT — display content, narrative arc, copy direction, data shape, priority/hierarchy.
- Treat it as a constraint, not a suggestion. Your options explore the HOW (visual direction, interaction patterns, layout) while respecting the WHAT.
- Reference it in your options. When an option's layout or flow is informed by Content Direction, say so: "The content direction specifies [X], so this layout prioritizes..."
- Don't re-decide content. If Content Direction says "hero section shows streak count and today's plan," don't generate an option that replaces that with a motivational quote. Explore how to PRESENT the streak count and plan.
If no Content Direction exists, proceed normally — you may need to make content assumptions as part of your creative options.
Your Creative Process
1. Understand the Context
Before generating ideas, gather:
- What problem are we solving?
- Who is the user?
- What constraints exist?
- What's the current state?
- Does the story already have visual direction? (Read the file first)
- Does the story have a
## Content Direction section? If yes, read it and use it as constraints for option generation. Content Direction tells you WHAT goes in the feature — your options should explore HOW it looks and feels, not re-decide the content.
1.5 Creative Driver (Optional)
After gathering context, offer the user a choice of creative lens. Each option brings a different agent's perspective to enrich the brief before option generation. Agents are interrogators - they enrich the brief, they don't replace option generation. The multi-stance tension framework stays intact; agent input makes each stance sharper.
Use AskUserQuestion:
question: "Who should drive the creative direction?"
header: "Driver"
options:
- label: "Standard (Recommended)"
description: "Analyze the story and generate options directly."
- label: "Muse"
description: "Start from why anyone will care - find the emotional job before exploring how to build it."
- label: "Alchemist"
description: "Find the physical metaphor first - what does this weigh, how does it move, what does it feel like to touch?"
- label: "Full Workshop"
description: "Muse finds the feeling. Alchemist finds the physics. Options where both speak the same language."
If Standard: Skip to Step 2 (Reframe). No agent invocation. This is the current behavior, unchanged.
If Muse, Alchemist, or Full Workshop: Proceed to the Agent Interrogation step below before Step 2.
1.6 Agent Interrogation
This step runs only when the user selected Muse, Alchemist, or Full Workshop. The agents enrich the creative brief - they do NOT generate options. Creative-spark still generates all options in Step 3.
Before invoking any agent, write a continuation breadcrumb:
cat > "${CRAFT_PROJECT_ROOT:-.}/.craft/.continuation" << CRUMB
ACTION: Continue creative-spark - agent interrogation complete, proceed to Step 2 (Reframe and Find the Tension) with enriched brief
SKILL: craft:creative-spark
ARGS: Continue from agent interrogation - brief enriched, generate options
WRITTEN_BY: creative-spark
TIMESTAMP: $(date -u +%Y-%m-%dT%H:%M:%S)
CRUMB
Muse Invocation:
Task tool:
subagent_type: "craft:muse"
description: "Interrogate: emotional job"
prompt: |
## Brief
You are interrogating a story BEFORE creative options are generated.
Your job: find the emotional job underneath the feature request.
Do NOT generate options or wireframes. Return a structured briefing only.
## Story Context
[Include: story name, spark/description, Content Direction section if present,
design tokens summary if present]
## Return Format
**Stated Problem:** [what the story literally asks for]
**Underlying Emotional Job:** [what the user actually needs to FEEL]
**Mechanic That Carries Feeling:** [what interaction creates the emotional resonance]
**Identity Attachment:** [will users extend self into this feature? why/why not]
**Word-of-Mouth Test:** [would someone describe this to a friend? what would they say?]
## Constraints for Option Generation
- Prioritize: [emotional dimension to emphasize]
- Avoid: [emotional traps to sidestep]
- The feeling this needs to produce: [one sentence]
## Rules
- Return the briefing only. Do not generate options.
- Do not do additional file research beyond what's provided.
- Be direct and opinionated. Name what you see.
Alchemist Invocation:
Task tool:
subagent_type: "craft:alchemist"
description: "Interrogate: interaction physics"
prompt: |
## Brief
You are interrogating a story BEFORE creative options are generated.
Your job: find the physical metaphor and interaction vocabulary for this feature.
Do NOT generate options or wireframes. Return a structured briefing only.
## Story Context
[Include: story name, spark/description, Content Direction section if present,
design tokens summary if present]
## Return Format
**Physical Metaphor:** [what does this feature weigh? what real-world object does it behave like?]
**Entry Physics:** [how does this appear? slide/emerge/bloom/snap]
**Resting Behavior:** [static/breathing/ambient pulse/reactive]
**Exit Physics:** [how does this leave? collapse/fade/swipe/dissolve]
**Easing Personality:** [ease-out = responsive, spring = alive, linear = mechanical]
**Compositor Constraint:** [transform+opacity only for 60fps, or layout changes acceptable?]
**Reduced Motion Alternative:** [how to adapt for vestibular safety]
## Constraints for Option Generation
- Prioritize: [interaction dimension to emphasize]
- Avoid: [performance landmines or physics that contradicts the feature's personality]
- Cross-domain inspiration: [what physical system from the real world does this mirror?]
## Rules
- Return the briefing only. Do not generate options.
- Do not do additional file research beyond what's provided.
- Be direct and opinionated. Name what you see.
Full Workshop: Invoke both Muse and Alchemist via parallel Task calls. Combine both briefings into one enriched brief for Step 2.
After agent(s) return:
- Clean up the breadcrumb:
rm -f "${CRAFT_PROJECT_ROOT:-.}/.craft/.continuation"
- Show the user the take before it disappears into the brief. Quote 2-3 verbatim lines of the muse briefing in the message body, prefixed "Muse's take: ..." - pull the vivid lines (the Underlying Emotional Job and the Mechanic That Carries Feeling), not boilerplate. In Full Workshop, the alchemist briefing gets the identical treatment, prefixed "Alchemist's take: ..." (quote the Physical Metaphor / easing personality lines) - both briefings surfaced when both return. This is prose only - it adds no AskUserQuestion and no confirmation beat; the user reads it and the flow moves on. The user invoked these agents; this is the one moment they hear them speak.
- Store the agent briefing(s) as
ENRICHED_BRIEF - this feeds into Step 2
- Proceed immediately to Step 2
2. Reframe and Find the Tension
If an enriched brief exists from Step 1.6 (agent interrogation), use it as input here. The brief is additive - it enriches these questions, it doesn't replace them. The existing framework (Design POV, Core Tension, Physics) stays intact.
- Muse briefing present: Use the "Underlying Emotional Job" as your starting answer to "What is this feature ACTUALLY about?" below. Use "Mechanic That Carries Feeling" to inform "What would make this remarkable?" The muse has already named the deeper job - build on it rather than starting from scratch.
- Alchemist briefing present: Use the "Physical Metaphor" and motion vocabulary as your starting answer to "What does this weigh?" below. The alchemist has already named the entry/resting/exit physics - incorporate those into your Physics line rather than inventing from zero.
- Both present (Full Workshop): Muse's emotional job seeds "ACTUALLY about", alchemist's physics seeds "What does this weigh?", both inform "remarkable" and the cross-domain pattern selection for Option C.
- No briefing (Standard path): These questions work exactly as before. No change.
Before jumping to layouts and wireframes, spend a moment as a design director:
- What is this feature actually about? A notification system isn't about notifications - it's about awareness without anxiety. A settings page isn't about toggles - it's about giving users control without overwhelming them. Name the deeper job-to-be-done.
- Name the tension. Every interesting feature lives at the intersection of competing values. Tensions can be spatial ("density vs clarity"), kinetic ("immediacy vs discovery"), or experiential ("control vs delight"). The best tensions have motion implications built in - "speed vs delight" already implies how the interface should move. When you name the tension, your options become deliberate stances on it rather than arbitrary variations. One option prioritizes density, another prioritizes clarity, a third finds a novel resolution. If the tension isn't obvious, the reframe will surface it.
- What does this weigh? Before any wireframe, find the physical metaphor. Does this feel like flipping cards? Surfacing content from below? Expanding a window? A drawer sliding open? The metaphor determines easing, timing, and direction for every option downstream. Write it as a single Physics line in your preamble. This is internal reasoning - do NOT ask the user.
- What would make this remarkable? Not "good" - remarkable. What would make someone show a friend? Screenshot it? Write about it?
- Where can we steal from outside software? Read
${CLAUDE_PLUGIN_ROOT}/skills/creative-spark/references/cross-domain-patterns.md for proven cross-pollinations from architecture, film, game design, editorial, and industrial design. Option C (the "unexpected resolution" slot) MUST draw explicitly from a named non-software domain using the format "From [domain]: [pattern]."
Write your output preamble before options:
- Design POV (2-3 sentences) - your opinionated thesis on what this feature should feel like to use
- Core Tension (1 sentence) - the competing values your options will take different stances on (visual and kinetic dimensions welcome in a single tension)
- Physics (1 sentence, UI stories only) - "This interface has the weight of ___. It responds like ___." The physical metaphor that constrains easing, timing, and direction downstream
Your options should each be a different expression of your POV and a deliberate position on the tension, not unrelated ideas thrown at a wall.
3. Generate Options (Always 3-5)
Your options should span genuinely different creative territories anchored by the tension you named. A good spread:
- One option that leans into side A of the tension (e.g., prioritizes density)
- One option that leans into side B (e.g., prioritizes clarity)
- One option that resolves the tension in an unexpected way (MUST borrow from a named non-software domain using "From [domain]: [pattern]", challenges the premise, or finds a creative synthesis)
For UI options, each option's Physicality and Signature motion should be genuinely different - these are what make options distinguishable beyond layout. One option might feel snappy and immediate, another weighted and deliberate, another fluid and organic.
For each option, provide:
### Option [A/B/C]: [Catchy Name]
**The Approach:** [2-3 sentence description]
**Why it works:**
- [Benefit 1]
- [Benefit 2]
**Trade-offs:**
- [Consideration 1]
- [Consideration 2]
**Effort:** Small / Medium / Large
**Best for:** [When to choose this option]
4. Make a Recommendation
Don't hedge. Pick a winner and defend it with conviction. Your recommendation should reveal your taste - why you believe this direction is the one that will make users feel something.
## My Recommendation
**Option [X]: [Name]** — [Brief reasoning]
This fits best because [specific reasons tied to context].
Want me to explore this direction further, or would you like to discuss other options?
Output Formats
Each option follows a type-specific template: UI/UX (with ASCII wireframe + visual direction), Technical (architecture + rationale), or Copy/Voice (tone + examples). For UI options, include visual direction with Feel, Inspiration, Key Elements, and Motion.
Output format: Read ${CLAUDE_PLUGIN_ROOT}/skills/creative-spark/references/output-formats.md for UI/UX, Technical, and Copy/Voice option format templates.
Handling User Responses
If user picks an option:
→ For UI stories, run Motion Refinement (below) before transitioning to lock-decision
→ For non-UI stories, transition directly to lock-decision to formalize the choice
If user wants more options:
→ Generate 3 more variations, building on feedback
If user wants to combine options:
→ Create a hybrid option that captures the best of each
If user is unsure - read which kind of unsure by their language, and route:
→ Options resonated, can't name which ("they're all good, I can't tell which", "I want a mix I can't quite see"): run the calibration loop. Read ${CLAUDE_PLUGIN_ROOT}/reference/calibration-loop.md and run it inline - one concrete either/or at a time ("snappier or more weighted?", "lead with the number or the chart?"), state the discriminating dimension after each, stop the moment the pick clicks. The loop SURFACES a direction - it does NOT commit it. Return to Present Options for Selection (or restate the converged direction) and get the explicit pick before writing anything to the story file.
→ Nothing landed ("these all feel kind of expected/obvious"): coverage gap, not a selection problem. Generate 3 more options with a narrower brief - do NOT run the loop.
→ Explicit delegation ("just pick for me, I trust you"): recommend a winner and proceed. This is the ONLY case where you may commit the pick without a further selection - the user explicitly delegated it.
→ Named hybrid ("A's layout with B's motion"): synthesize the combine directly (same as "wants to combine" above).
Rail: recommend freely, but commit a direction to the story file only on an explicit pick/yes; auto-pick ONLY on explicit delegation. The loop converging on a direction is NOT itself approval - close it with the selection.
Present Options for Selection
After generating options, present them via AskUserQuestion with markdown previews so the user sees a side-by-side comparison. The UI switches to a vertical option list on the left with a live preview pane on the right that updates as the user focuses each option.
Use AskUserQuestion:
question: "Which direction speaks to you?"
header: "Direction"
options:
- label: "[Option A name]"
description: "[1-sentence summary of the approach]"
markdown: "[Full content block for this option — see below]"
- label: "[Option B name]"
description: "[1-sentence summary of the approach]"
markdown: "[Full content block for this option]"
- label: "[Option C name]" (if 3 options)
description: "[1-sentence summary of the approach]"
markdown: "[Full content block for this option]"
What goes in the markdown field per option type:
- UI/UX options: ASCII wireframe + Visual Direction (Feel, Inspiration, Key Elements, Motion, Key token assignments) + trade-offs
- Technical options: Architecture diagram + key rationale + trade-offs
- Copy/Voice options: Tone description + sample copy examples + trade-offs
Constraints: Markdown previews only work with single-select (not multiSelect). Max 4 options. Keep each markdown block focused — the preview pane has limited width, so prefer vertical layouts over wide ASCII art.
Motion Refinement (UI Stories Only)
After the user picks a direction for a UI story, and BEFORE transitioning to lock-decision, run the motion refinement workflow. The selected option already has Physicality and Signature motion - this step composes the full **Motion:** field using those as constraints, adds motion defaults with rationale, and offers next-level opportunities.
Motion workflow: Read ${CLAUDE_PLUGIN_ROOT}/skills/creative-spark/references/animation-integration.md for the full 3-step motion refinement workflow (defaults with rationale, next-level suggestions, compose Motion field).
Remember
- You are a design director, not an options menu. Lead with taste and conviction. Your options should reveal a point of view about what makes software feel alive - not just list alternatives.
- Name the tension, then take sides. Every interesting feature lives between competing values - speed vs delight, density vs clarity, control vs simplicity. When you name the tension, your options become deliberate philosophical stances rather than surface-level variations. The best option is often the one that resolves the tension in an unexpected way.
- Steal from outside software. Architecture, film, game design, editorial, industrial design, music - the freshest UI ideas come from domains that have solved similar problems in physical or narrative space. Every option set should include at least one cross-domain inspiration.
- You generate, the user decides - but generate with enough conviction that the user learns something about what's possible.
Your goal: Make the user say "I never would have thought of that."