From svelte-5
Guides Storybook story writing, previewing, and verification using MCP tools, fixtures, Playwright, CSS import chains, and Svelte 4 store wrappers.
How this skill is triggered — by the user, by Claude, or both
Slash command
/svelte-5:storybookThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- ALWAYS use `mcp__storybook__get-storybook-story-instructions` before writing stories.
mcp__storybook__get-storybook-story-instructions before writing stories.mcp__storybook__preview-stories to preview stories after writing them.parameters.fixtures for fixture overrides.App.svelte AND .storybook/preview.ts. Moving imports out of the SCSS chain breaks Storybook unless also added to preview.ts or storybook.scss.Components that import and read from Svelte 4 module-level
writable() stores (from svelte/store) render with default/
empty data in Storybook unless the stores are populated before
the component mounts. This does NOT apply to Svelte 5 runes-
based state in .svelte.ts modules — those are reactive on
their own.
Pattern: Create a <ComponentName>Wrapper.svelte that:
setContext() for any required Svelte contextsstore.set() with mock data for every Svelte 4
writable() store the component importsUse asChild in the story — NEVER decorators for components
that depend on Svelte 4 writable stores. Decorators lose
complex args (Writable stores, objects with methods) through
Storybook's arg serialization.
<!-- stories/MyComponentWrapper.svelte -->
<script lang="ts">
import { setContext } from 'svelte'
import { writable } from 'svelte/store'
import { myWritableStore } from '../stores' // Svelte 4 writable()
setContext('myContext', true)
myWritableStore.set({ /* mock data */ })
</script>
<div style="max-width: 600px; padding: 1rem;">
<slot />
</div>
<!-- stories/MyComponent.stories.svelte -->
<Story name="Default" asChild>
<MyComponentWrapper>
<MyComponent />
</MyComponentWrapper>
</Story>
Using () => {} for callback props in stories means the
callback is never verified. If the component passes wrong
data types to the callback, the noop silently swallows it.
For critical callbacks (onChange, onSubmit, onParameterChanged):
A common failure: a noop callback hides a bug where
onChange passes full selection objects instead of expected
string values. The story "passes" because noop accepts
anything.
When adding skip-vitest to a story, IMMEDIATELY verify it
renders correctly in the Storybook UI via Playwright MCP.
Navigate to the story URL, wait for render, take a screenshot,
check console for 0 errors. skip-vitest means "can't
automate as vitest test" — it does NOT mean "don't verify."
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub fubits1/svelte-skills --plugin svelte-5