Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add dylantarre/design-system-skills --skill vuegit clone --depth 1 https://github.com/dylantarre/design-system-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/dylantarre/design-system-skills/vue)<a href="https://agentmods.dev/skills/dylantarre/design-system-skills/vue"><img src="https://agentmods.dev/badge/skills/dylantarre/design-system-skills/vue/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/dylantarre/design-system-skills/vue"><img src="https://agentmods.dev/badge/skills/dylantarre/design-system-skills/vue.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00039 | $0.04763 |
| Opus 5 | $0.00019 | $0.02381 |
| Sonnet 5 | $0.00008 | $0.00953 |
| Haiku 4.5 | $0.00004 | $0.00476 |
Grade A, and why
vue scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 848 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Vue Component Patterns
Overview
Build accessible, token-driven Vue 3 components using Composition API and modern patterns. Covers SFC structure, TypeScript integration, composables, and consuming design tokens.
When to Use
- Creating a Vue 3 component library
- Building components that use design tokens
- Setting up a design system in Vue/Nuxt
- Converting designs to Vue components
The Process
- Identify component type: Primitive, composite, or layout?
- Choose styling approach: Scoped CSS, CSS Modules, Tailwind, or UnoCSS?
- Define props with TypeScript: Use
definePropswith interfaces - Implement with tokens: CSS custom properties or provide/inject
- Add accessibility: ARIA, keyboard handling, focus management
- Create composables: Extract reusable logic
Project Structure
src/
├── components/
│ ├── primitives/
│ │ ├── VButton/
│ │ │ ├── VButton.vue
│ │ │ ├── VButton.test.ts
│ │ │ └── index.ts
│ │ ├── VInput/
│ │ └── VText/
│ ├── composite/
│ │ ├── VCard/
│ │ ├── VModal/
│ │ └── VDropdown/
│ └── layout/
│ ├── VStack/
│ ├── VGrid/
│ └── VContainer/
├── composables/
│ ├── useTheme.ts
│ ├── useBreakpoint.ts
│ └── useId.ts
├── tokens/
│ └── index.css
└── index.ts
Component Patterns
Button Component
VButton.vue:
<script setup lang="ts">
import { computed, useSlots } from 'vue';
export interface ButtonProps {
/** Visual style variant */
variant?: 'primary' | 'secondary' | 'ghost' | 'danger';
/** Size of the button */
size?: 'sm' | 'md' | 'lg';
/** Full width button */
fullWidth?: boolean;
/** Loading state */
loading?: boolean;
/** Disabled state */
disabled?: boolean;
/** HTML button type */
type?: 'button' | 'submit' | 'reset';
}
const props = withDefaults(defineProps<ButtonProps>(), {
variant: 'primary',
size: 'md',
fullWidth: false,
loading: false,
disabled: false,
type: 'button',
});
const emit = defineEmits<{
click: [event: MouseEvent];
}>();
const slots = useSlots();
const isDisabled = computed(() => props.disabled || props.loading);
const classes = computed(() => [
'btn',
`btn--${props.variant}`,
`btn--${props.size}`,
{
'btn--full-width': props.fullWidth,
'btn--loading': props.loading,
},
]);
function handleClick(event: MouseEvent) {
if (!isDisabled.value) {
emit('click', event);
}
}
</script>
<template>
<button
:type="type"
:class="classes"
:disabled="isDisabled"
:aria-busy="loading"
@click="handleClick"
>
<span v-if="loading" class="btn__spinner" aria-hidden="true" />
<span v-if="slots.leftIcon" class="btn__icon">
<slot name="leftIcon" />
</span>
<span class="btn__label">
<slot />
</span>
<span v-if="slots.rightIcon" class="btn__icon">
<slot name="rightIcon" />
</span>
</button>
</template>
<style scoped>
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--spacing-xs);
font-family: inherit;
font-weight: 500;
line-height: 1;
white-space: nowrap;
cursor: pointer;
user-select: none;
border: 1px solid transparent;
border-radius: var(--radius-md);
transition:
background-color 150ms ease,
border-color 150ms ease,
transform 100ms ease;
}
.btn:focus-visible {
outline: 2px solid var(--color-primary-500);
outline-offset: 2px;
}
.btn:active:not(:disabled) {
transform: scale(0.98);
}
.btn:disabled {
cursor: not-allowed;
opacity: 0.5;
}
/* Variants */
.btn--primary {
background-color: var(--color-primary-500);
color: white;
}
.btn--primary:hover:not(:disabled) {
background-color: var(--color-primary-600);
}
.btn--secondary {
background-color: transparent;
border-color: var(--color-gray-300);
color: var(--color-gray-700);
}
.btn--secondary:hover:not(:disabled) {
background-color: var(--color-gray-50);
border-color: var(--color-gray-400);
}
.btn--ghost {
background-color: transparent;
color: var(--color-gray-700);
}
.btn--ghost:hover:not(:disabled) {
background-color: var(--color-gray-100);
}
.btn--danger {
background-color: var(--color-error-500);
color: white;
}
.btn--danger:hover:not(:disabled) {
background-color: var(--color-error-600);
}
/* Sizes */
.btn--sm {
height: 32px;
padding: 0 var(--spacing-sm);
font-size: var(--text-sm);
}
.btn--md {
height: 40px;
padding: 0 var(--spacing-md);
font-size: var(--text-base);
}
.btn--lg {
height: 48px;
padding: 0 var(--spacing-lg);
font-size: var(--text-lg);
}
/* Modifiers */
.btn--full-width {
width: 100%;
}
.btn--loading .btn__label {
opacity: 0;
}
.btn__spinner {
position: absolute;
width: 1em;
height: 1em;
border: 2px solid currentColor;
border-right-color: transparent;
border-radius: 50%;
animation: spin 600ms linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
.btn__icon {
display: flex;
flex-shrink: 0;
}
</style>
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 12d ago First seen · 848 lines · 39 tokens per session scan A 11717209b756
vue is a skill published in the GitHub repository dylantarre/design-system-skills (42 stars, last pushed 8mo ago), licensed MIT. It adds 39 tokens to every session and 4,763 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
shadcn-svelte
Pre-built shadcn-svelte components for json-render Svelte apps. Use when working with @json-render/shadcn-svelte, adding standard UI components to a Svelte catalog, or building Svelte web UIs with shadcn-svelte + Tailwind CSS components.
create-site
Creates a new Power Pages code site (SPA) using React, Angular, Vue, or Astro. Guides through the full process from initial concept to deployed site: requirements discovery, scaffolding, component planning, design, implementation, validation, and deployment. Use when the user wants to create, build, or scaffold a new…
v3-create-crud
A page generator for standard create, read, update, and delete screens, commonly called CRUD screens. It uses Element Plus, a Vue user-interface library, to build tables, searches, pagination, forms, and delete confirmations.
v3-use-composables
Documentation for reusable Vue functions in a project, covering device detection, asynchronous dropdown data, loading screens, pagination, routing, themes, page titles, and watermarks.
moai-domain-uiux
UI/UX design systems specialist covering accessibility, icons, theming, design tokens, and user experience patterns. Use when working on design systems, WCAG compliance, ARIA patterns, or dark mode theming.
frontend-conventions
Frontend convention reference (SvelteKit / Svelte 5). Auto-injected into frontend-aware agents - not user-invocable.