Agent Skillswindmill-labs/windmill › svelte-frontend

svelte-frontend

GitHub

提供Windmill前端Svelte开发规范,指导在frontend目录下编写或修改代码时复用现有组件并遵循品牌指南。

.agents/skills/svelte-frontend/SKILL.md windmill-labs/windmill

Trigger Scenarios

需要在前端目录创建新的UI组件 修改现有的前端界面逻辑 实现符合品牌规范的页面布局

Install

npx skills add windmill-labs/windmill --skill svelte-frontend -g -y
More Options

Non-standard path

npx skills add https://github.com/windmill-labs/windmill/tree/main/.agents/skills/svelte-frontend -g -y

Use without installing

npx skills use windmill-labs/windmill@svelte-frontend

指定 Agent (Claude Code)

npx skills add windmill-labs/windmill --skill svelte-frontend -a claude-code -g -y

安装 repo 全部 skill

npx skills add windmill-labs/windmill --all -g -y

预览 repo 内 skill

npx skills add windmill-labs/windmill --list

SKILL.md

Frontmatter
{
    "name": "svelte-frontend",
    "description": "Svelte coding guidelines for the Windmill frontend. MUST use when writing or modifying code in the frontend directory."
}

Windmill Svelte Patterns

Apply these Windmill-specific patterns when writing Svelte code in frontend/. For general Svelte 5 syntax (runes, snippets, event handling), use the Svelte MCP server.

Before writing any UI (MUST)

Do both of these before the first line of markup — not after, and not only when something looks unfamiliar.

1. Find the component that already exists. frontend/src/lib/components/common/index.ts is the design-system barrel — 28 lines, read it in full. It exports far more than the three documented below: Alert, Badge, Breadcrumb, Drawer/DrawerContent, Menu/MenuItem, Tabs/Tab/TabContent, Skeleton, FileInput, RadioCard, Section, Kbd, ActionRow, ClearableInput, CopyButton, SecondsInput, UndoRedo, Url.

The barrel is not the full picture either: common/ has 34 subdirectories and only 23 exports, so modal/, popup/, stepper/, tooltip/, checkbox/, table/, contextmenu/, confirmationModal/, calendarPicker/, fileUpload/, toggleButton-v2/ and more exist but must be imported by path. Selects, text inputs and melt-based primitives sit next to common/ in components/select/, components/text_input/, components/meltComponents/.

The tree holds 1,600+ components — grep frontend/src/lib/components for the thing you're about to build; it almost certainly exists. Building a new one is the last resort, not the first move.

2. Read the guideline for what you're building. frontend/brand-guidelines.md is the authority on how it should look and read. Don't load all 34k chars — jump to the section:

Building Section to read
Any new screen or component # Components (Core Rules, Quick Reference)
Buttons, CTAs ## Buttons — hierarchy matters, only one Accent per view
Colors, surfaces, borders # Color system (Quick Reference, Do's and Don'ts)
Text, labels, headings # Typography — note ## Text Casing, sentence case throughout
Spacing, grids, page structure # Spacing & Layout; # Layout## Form for forms
Shadows, overlays, depth # Elevation
Icons # Iconography
Wording of any UI copy # Voice & Communication, # Tone of Voice

Get the line range with grep -n '^#' frontend/brand-guidelines.md, then read just that span.

Windmill UI Components (MUST use)

Always use Windmill's design-system components. Never use raw HTML elements. The three below are the ones you'll reach for most often — they are examples, not the catalog. For anything else, go back to the barrel and grep.

Buttons — <Button>

<script>
  import { Button } from '$lib/components/common'
  import { ChevronLeft } from 'lucide-svelte'
</script>

<Button variant="default" onclick={handleClick}>Label</Button>
<Button startIcon={{ icon: ChevronLeft }} iconOnly onclick={prev} />

Props: variant?: 'accent' | 'accent-secondary' | 'default' | 'subtle', unifiedSize?: '2xs' | 'xs' | 'sm' | 'md' | 'lg', startIcon?: { icon: SvelteComponent }, iconOnly?: boolean, disabled?: boolean

size on <Button> is banned — it, spacingSize and extendedSize are the legacy sizing system (xs3/xs2/xs/…, marked @deprecated in Button.svelte). Size every button with unifiedSize, the small ones included: 2xs and xs are h-5, sm is h-7, md is h-8, lg is h-10. Existing size="xs2" call sites are legacy, not a precedent to copy. Same for variant: contained/border/divider are deprecated — use the four listed above.

Text inputs — <TextInput>

<script>
  import { TextInput } from '$lib/components/common'
</script>

<TextInput bind:value={val} placeholder="Enter value" />

Props: value?: string | number (bindable), placeholder?: string, disabled?: boolean, error?: string | boolean, size?: 'sm' | 'md' | 'lg'

Selects — <Select>

<script>
  import Select from '$lib/components/select/Select.svelte'
</script>

<Select items={[{ label: 'Jan', value: 1 }]} bind:value={selected} />

Props: items?: Array<{ label?: string; value: any }>, value (bindable), placeholder?: string, clearable?: boolean, size?: 'sm' | 'md' | 'lg'

Icons — lucide-svelte

Never write inline SVGs. Import from lucide-svelte:

<script>
  import { ChevronLeft, X } from 'lucide-svelte'
</script>
<ChevronLeft size={16} />

Form Components

Form components (TextInput, Toggle, Select, etc.) should use the unified size system when placed together.

Styling

  • Use Tailwind CSS for all styling — no custom CSS
  • Use Windmill's theming classes for colors/surfaces (see frontend/brand-guidelines.md)
  • Read component props JSDoc before using them

Feature Telemetry

New user-facing UX is the main source of feature_usage counters — propose them in the plan, not as a separate question, and read docs/feature-telemetry.md first. logFeatureUsage() from $lib/utils/featureUsage is only half the change: the (feature, kind) pair must also be registered in the backend allowlist or every event is silently discarded, and the disclosure copy in InstanceSettings.svelte must name what you added.

Svelte MCP Server

Use the Svelte MCP tools when working on Svelte code:

  1. list-sections: Call first to discover available docs
  2. get-documentation: Fetch relevant sections based on use_cases
  3. svelte-autofixer: MUST use on all Svelte code before finalizing — keep calling until no issues
  4. playground-link: Only after user confirms and code was NOT written to project files

Verifying in the Browser

After changing Svelte code, use the Playwright MCP (mcp__playwright__*) to drive the running frontend and confirm the change works. See frontend/AGENTS.md → "Verifying Frontend Changes" for the full flow. Use playwright (headless) on devboxes; playwright-headed when a display is available.

Version History

  • 574775d Current 2026-08-20 17:31

Same Skill Collection

.agents/skills/adding-a-trigger/SKILL.md
.agents/skills/ai-chat/SKILL.md
.agents/skills/ai-evals/SKILL.md
.agents/skills/codebase-design/SKILL.md
.agents/skills/commit/SKILL.md
.agents/skills/domain-modeling/SKILL.md
.agents/skills/grilling/SKILL.md
.agents/skills/improve-codebase-architecture/SKILL.md
.agents/skills/local-review-codex/SKILL.md
.agents/skills/local-review/SKILL.md
.agents/skills/native-trigger/SKILL.md
.agents/skills/pr/SKILL.md
.agents/skills/refine/SKILL.md
.agents/skills/rust-backend/SKILL.md
.agents/skills/update-sqlx/SKILL.md
.claude/skills/adding-a-trigger/SKILL.md
.claude/skills/ai-chat/SKILL.md
.claude/skills/ai-evals/SKILL.md
.claude/skills/codebase-design/SKILL.md
.claude/skills/commit/SKILL.md
.claude/skills/domain-modeling/SKILL.md
.claude/skills/grilling/SKILL.md
.claude/skills/improve-codebase-architecture/SKILL.md
.claude/skills/local-review-codex/SKILL.md
.claude/skills/local-review/SKILL.md
.claude/skills/native-trigger/SKILL.md
.claude/skills/pr/SKILL.md
.claude/skills/refine/SKILL.md
.claude/skills/rust-backend/SKILL.md
.claude/skills/svelte-frontend/SKILL.md
.claude/skills/update-sqlx/SKILL.md
system_prompts/auto-generated/skills/cli-commands/SKILL.md
system_prompts/auto-generated/skills/preview/SKILL.md
system_prompts/auto-generated/skills/write-script-bun/SKILL.md
system_prompts/auto-generated/skills/write-script-bunnative/SKILL.md
system_prompts/auto-generated/skills/write-script-deno/SKILL.md
system_prompts/auto-generated/skills/write-workflow-as-code/SKILL.md
system_prompts/auto-generated/skills/raw-app/SKILL.md
system_prompts/auto-generated/skills/resources/SKILL.md
system_prompts/auto-generated/skills/schedules/SKILL.md
system_prompts/auto-generated/skills/triggers/SKILL.md
system_prompts/auto-generated/skills/write-flow/SKILL.md
system_prompts/auto-generated/skills/write-script-ansible/SKILL.md
system_prompts/auto-generated/skills/write-script-bash/SKILL.md
system_prompts/auto-generated/skills/write-script-bigquery/SKILL.md
system_prompts/auto-generated/skills/write-script-csharp/SKILL.md
system_prompts/auto-generated/skills/write-script-duckdb/SKILL.md
system_prompts/auto-generated/skills/write-script-go/SKILL.md
system_prompts/auto-generated/skills/write-script-graphql/SKILL.md

Metadata

Files
0
Version
7a0c81d
Hash
0cbaaa8a
Indexed
2026-08-20 17:31

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-31 23:46
浙ICP备14020137号-1 $Carte des visiteurs$