From arn-spark
This skill should be used when the user says "visual sketch", "arn visual sketch", "sketch directions", "explore visuals", "visual proposals", "try different looks", "design directions", "sketch the UI", "visual exploration", "compare styles", "show me options", "what could this look like", or wants to generate multiple visual direction proposals as real HTML/CSS running on the scaffolded project's dev server, iteratively selecting and refining until a final visual direction is chosen.
npx claudepluginhub appsvortex/arness --plugin arn-sparkThis skill uses the workspace's default tool permissions.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Implements structured self-debugging workflow for AI agent failures: capture errors, diagnose patterns like loops or context overflow, apply contained recoveries, and generate introspection reports.
Generate visual direction proposals as real HTML/CSS in the scaffolded project, compare them side by side in the browser, and iteratively refine until a direction is selected. This is a conversational skill that runs in normal conversation (NOT plan mode). The primary artifacts are a visual-direction.md document in the Vision directory and screenshot captures of the selected direction in the visual grounding directory.
This skill sits between /arn-spark-scaffold and /arn-spark-style-explore in the greenfield pipeline. It produces a visual-direction.md that style-explore uses as primary input for detailed design token specification. The user sees what the product could look like before committing to a full design system.
The iterative process works in rounds:
Each proposal runs on the scaffold's actual dev server using the project's real CSS framework and component library.
The following artifacts inform the sketch generation. Check in order:
Determine the output directories:
CLAUDE.md and check for a ## Arness section## Arness section exists or Arness Spark fields are missing, inform the user: "Arness Spark is not configured for this project yet. Run /arn-brainstorming to get started — it will set everything up automatically." Do not proceed without it.All references to "Vision directory" and "visual grounding directory" in this skill refer to the configured directories determined above.
Scaffold (required):
scaffold-summary.md## Arness section found, check .arness/vision/scaffold-summary.md at the project rootpackage.json at the project rootIf a scaffold-summary is found: Read it to extract the full technology stack — UI framework, CSS framework, component library, icon library, dev server command, build command.
If no scaffold-summary is found: Inform the user: "The project must be scaffolded before visual sketching. The sketch needs a real CSS framework and component library to generate proposals. Run /arn-spark-scaffold first." Do not proceed.
Architecture vision (required for fallback context):
architecture-vision.md## Arness section found, check .arness/vision/architecture-vision.mdIf found: Read it for UI framework and platform context. The scaffold-summary is the primary source, but the architecture vision provides additional context (platform type, product category).
If not found: Proceed if scaffold-summary exists — the scaffold-summary contains enough technical context.
Product concept (recommended):
product-concept.md## Arness section found, check .arness/vision/product-concept.mdIf found: Read it to identify screens, understand target users, and derive realistic content for sketches.
If not found: Ask the user to describe the product briefly. Screen identification and content will be based on the user's description. Note the limitation.
Dev server verification:
If the build fails, do not proceed with sketch generation. Report the error and suggest the user fix the scaffold first.
Read available documents and present a summary:
product-concept.md → extract target users, core experience, product pillarsarchitecture-vision.md → extract UI framework, platform typescaffold-summary.md → extract CSS framework, component library, icon library, dev commandssrc/routes/ (SvelteKit)app/ with layout.tsx/page.tsx (Next.js app router)pages/ with index.tsx (Next.js pages router) or index.vue (Nuxt)Present the context:
"Your project uses [UI framework] with [CSS framework] and [component library] on [platform]. The product targets [target users] and focuses on [core experience].
I will create visual direction proposals as real pages in your project, running on your dev server. Each proposal applies a distinct visual approach to the same set of product screens.
Let's start by identifying which screens to sketch."
From the product concept (or user description), propose 2-4 key screens that represent the core experience:
"Based on your product concept, I suggest sketching these screens:
These screens cover the main user interactions and will show how each visual direction handles different content types (data grids, lists, forms).
Adjust the screen list, add screens, or confirm to proceed."
Screen selection criteria:
Wait for user confirmation before proceeding.
Propose which design aspects should vary between proposals:
"Which aspects of the design should differ between proposals? I suggest exploring:
All of these, or focus on specific ones?"
The user's choices guide how the direction briefs (Step 4) differ from each other. If the user wants all dimensions to vary, each proposal will be maximally distinct. If they focus on 1-2 dimensions, proposals share a base but diverge on those aspects.
Read the aesthetic philosophy reference for tone palette and design vocabulary:
Read
${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-visual-sketch/references/aesthetic-philosophy.md
Use the tone palette (Section 1), anti-generic rules (Section 2), and design dimension guidance (Section 3) to inform brief composition. Each brief should be informed by these principles but written in the skill's own voice — do not copy-paste from the reference.
Based on the user's exploration preferences, compose N direction briefs. Ask the user how many proposals to generate (default 3).
"How many proposals would you like? (Default: 3)"
After the user specifies a count, compose the briefs:
"I'll generate [N] proposals:
Proposal A — [Short Name] [Full paragraph describing the visual direction. Be specific about colors, typography, layout, density, and component style. E.g., "Dark and focused — deep charcoal backgrounds with electric blue accents, monospace headings with sans-serif body text, compact information density, sharp corners with thin borders, no shadows. Conveys a technical, developer-oriented aesthetic."]
Proposal B — [Short Name] [Different direction paragraph]
Proposal C — [Short Name] [Different direction paragraph]
Does this look right? Adjust any brief before I generate."
Brief composition rules:
arn-spark-visual-sketcher agent — be explicit enough that the agent can make concrete CSS choicesWait for user confirmation before generating.
Create the arness-sketches/ route namespace in the project's source tree. The structure is framework-aware:
SvelteKit:
src/routes/arness-sketches/
+page.svelte ← Gallery (created in Step 7)
+layout.svelte ← Minimal wrapper (no proposal-specific styling)
round-1/
proposal-1/ ← Agent writes here
proposal-2/
proposal-3/
Next.js (app router):
app/arness-sketches/
page.tsx
layout.tsx
round-1/
proposal-1/
proposal-2/
proposal-3/
Nuxt:
pages/arness-sketches/
index.vue
round-1/
proposal-1/
proposal-2/
proposal-3/
Create:
arness-sketches/ directory at the correct location for the frameworkarness-sketches/ level (no CSS variable definitions — those belong to proposal-level layouts)round-1/ directory with empty proposal-{N}/ subdirectories for each proposalRead the sketch gallery guide for gallery structure details:
Read
${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-visual-sketch/references/sketch-gallery-guide.md
Launch N arn-spark-visual-sketcher agents simultaneously using the Task tool. Each agent receives:
src/routes/arness-sketches/round-1/proposal-1/)${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-visual-sketch/references/aesthetic-philosophy.mdAll agents are launched in a single message with multiple Task tool calls to maximize parallelism.
Error handling per agent:
After all agents complete (or the successful ones complete):
proposal-manifest.json to get screen routes, direction summaries, and CSS variable valuesarness-sketches/ following the sketch gallery guide:
directionNote in the manifest), color swatches from CSS variables, link to the proposal's first screenPresent to the user:
"Round 1 — [N] proposals generated.
Open http://localhost:[port]/arness-sketches to see the gallery and compare proposals.
| Proposal | Direction | Screens |
|---|---|---|
| A — [Name] | [1-line summary] | [count] |
| B — [Name] | [1-line summary] | [count] |
| C — [Name] | [1-line summary] | [count] |
Browse each proposal in your browser. When you are ready:
Wait for the user's feedback. The user may:
| User Says | Action |
|---|---|
| "I like Proposal B" / "Go with B" | Proceed to expansion |
| "B is close but too dark" | Note the feedback, refine the brief, proceed to expansion |
| "None of these work" | Return to Step 4 to compose new briefs |
| "This is the direction" / "B is perfect" | Skip expansion, proceed to Step 9 |
| "Can you show me [specific change]?" | Create a targeted single-proposal re-generation |
When the user selects a proposal for expansion:
round-{N+1}/ structure under arness-sketches/ with expansion-{1..M}/ directoriesarn-spark-visual-sketcher agents in parallel — each receives the expansion brief + original product context + tech context + new output path + aesthetic philosophy pathRepeat until the user says "this is the direction" or indicates satisfaction.
When the user has selected a final direction:
Capture screenshots: Invoke the arn-spark-style-capture agent with:
proposal-manifest.json)[visual-grounding]/designs/visual-sketch-[screen-name].png (e.g., visual-sketch-dashboard.png)If arn-spark-style-capture reports Playwright is not available, inform the user:
"Playwright is not installed, so I cannot capture screenshots automatically. You can:
npm install -D playwright && npx playwright install chromium) and re-run the capture[visual-grounding]/designs/Read the selected proposal's manifest: Get CSS variables, screen routes, and direction summary from proposal-manifest.json
Write visual-direction.md: Read the template and populate it:
Read
${CLAUDE_PLUGIN_ROOT}/skills/arn-spark-visual-sketch/references/visual-direction-template.md
Write the populated document to the Vision directory as visual-direction.md.
Offer route cleanup:
Ask (using AskUserQuestion):
What should happen to the sketch routes at [route path]/arness-sketches/?
arness-sketches/ to .gitignore)If Keep: Suggest adding the arness-sketches route directory to .gitignore so the sketches are not committed.
If Remove: Delete the entire arness-sketches/ directory from the project's route tree.
Stop the dev server if it was started by this skill (not if it was already running).
"Visual direction selected and documented.
[Vision directory]/visual-direction.md[visual-grounding]/designs/Recommended next steps:
/arn-spark-style-explore to translate this visual direction into precise design tokens and toolkit configuration/arn-spark-use-cases to specify system behaviorThe style explorer will use your visual direction as a starting point — you won't need to describe the style from scratch."
| Situation | Action |
|---|---|
| Generate initial proposals (Step 6) | Invoke N arn-spark-visual-sketcher agents in parallel via Task tool, each with unique direction brief and output path |
| Generate expansions (Step 8) | Invoke N arn-spark-visual-sketcher agents in parallel with expansion briefs derived from selected proposal + user adjustments |
| Capture final screenshots (Step 9) | Invoke arn-spark-style-capture with localhost URLs of selected sketch's screens and output to visual grounding designs/ |
| User asks about detailed design tokens | Defer: "Design tokens are specified in /arn-spark-style-explore. This skill establishes the visual direction." |
| User asks about interactive behavior | Defer: "Interactive behavior is validated in /arn-spark-clickable-prototype." |
| User asks about component showcases | Defer: "Component showcases are created by /arn-spark-static-prototype." |
| User asks about features or architecture | Defer to the appropriate skill (/arn-code-feature-spec, /arn-spark-arch-vision) |
| Agent build fails (single proposal) | Report which proposal failed. Present successful proposals. Offer to retry. |
| All agents fail | Report all errors. Ask user to verify the scaffold builds correctly. Suggest fixing the scaffold before retrying. |
| Style-capture unavailable | Proceed without screenshots. Visual-direction.md is still written with all other content. Note screenshots are pending. |
| User wants to compare with an external reference | Invoke arn-spark-style-capture with the external URL to capture it, then present alongside the proposals for comparison. |
Scaffold not found: Cannot proceed. Suggest /arn-spark-scaffold first.
Product concept not found: Proceed with the user's verbal description. Screen identification will be based on conversation. Note the limitation.
Architecture vision not found: Proceed if scaffold-summary exists — it contains sufficient technical context. Note the limitation.
Build fails before sketch generation: Report the error. Do not attempt to fix the scaffold — that is the user's responsibility or /arn-spark-scaffold's job.
One agent fails (others succeed): Present successful proposals. Show a placeholder card for the failed one. Offer to retry.
All agents fail: Report errors for all proposals. The most likely cause is a scaffold issue (missing dependencies, broken build). Suggest verifying the scaffold.
Dev server won't start: Report the error. The user can start it manually and provide the URL. Proceed with gallery creation.
Dev server port conflict: If the default port is in use, check if a dev server is already running. If so, use that server.
Playwright unavailable for captures: Proceed without screenshots. Write visual-direction.md with all content except screenshot paths. Note the limitation.
User wants to restart from scratch: Clear the arness-sketches/ directory and return to Step 2.
visual-direction.md already exists:
Ask (using AskUserQuestion):
A visual direction document already exists at
[path]. What should I do?
- Replace — Overwrite with the new direction
- Keep both — Rename the existing one and save the new direction alongside it
More than 5 rounds of iteration: Gently suggest: "We have been through [N] rounds. Would you like to finalize the current direction, or would it help to start fresh with new briefs?"
Writing the document fails: Print the full visual-direction.md content in the conversation so the user can save it manually.