Skip to main content
skill CX Codex

vue-skilld — Claude Code skill: what it does, how to install

Guides coding agents through Vue 3.6 development. Useful when creating composables, setting up Vapor Mode, or migrating code from Vue 3.4 and 3.5.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add skilld-dev/vue-ecosystem-skills --skill vue-skilld -a claude-code
Open on GitHub

What vue-skilld does

This skill provides context for building components against Vue 3.6.0-beta.17. It steers the agent toward modern patterns like defineModel, useTemplateRef, and onWatcherCleanup. References cover the alien-signals reactivity refactor alongside SFC bundler configurations.

Vapor Mode enforces strict boundaries. In Vapor components, Options API, getCurrentInstance(), v-memo, and app.config.globalProperties do not work. The skill prevents the assistant from proposing these invalid constructs, saving you from runtime failures during experiments without the Virtual DOM.

What it helps with

  • refactor old Reactivity Transform code into plain ref and computed
  • implement SSR lazy hydration using hydrateOnVisible
  • prepare single-file components for Vapor Mode compilation
  • replace obsolete @vnodeXXX event listeners with @vue:mounted

Example prompts for the agent

  • Refactor this component to Vue 3.6 syntax using useTemplateRef and defineModel
  • Check this SFC for compatibility with Vapor Mode constraints
  • Write a typed composable accepting MaybeRefOrGetter

How to install vue-skilld

1Skills CLI (Vercel)

npx skills add skilld-dev/vue-ecosystem-skills --skill vue-skilld -a claude-code

2Manually: put the files in place

~/.claude/skills/vue-skilld/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/vue-skilld/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about vue-skilld

How to install vue-skilld in Claude Code?

Run npx skills add skilld-dev/vue-ecosystem-skills --skill vue-skilld -a claude-code in your terminal. This copies the skill files directly into ~/.claude/skills/vue-skilld/.

What is vue-skilld designed for?

It supplies the AI agent with conventions and API updates for Vue 3.6.0-beta.17. It covers reactivity changes, compiler flags, and migrations from Vue 3.4.

What breaks when compiling components in Vapor Mode?

Vapor components drop Virtual DOM support and reject Options API syntax. They also do not support getCurrentInstance(), v-memo, or app.config.globalProperties.

Source text

SKILL.md · MIT
---
name: vue-skilld
description: Build, debug, and modernize UI with Vue 3.6. Use when editing *.vue files, writing components or composables, or working with code that imports "vue". Covers script setup, reactivity, Vapor Mode, SSR, and version-specific API changes from 3.4 through 3.6.0-beta.17.
license: MIT
---

# vue 3.6.0-beta.17 (vuejs/core)

Pre-release beta of the 3.6 line. Two headline changes vs 3.5:

- **Vapor Mode**, an opt-in compilation strategy for SFCs that skips the Virtual DOM; see [Vapor Mode](./references/vapor-mode.md).
- **alien-signals reactivity refactor**: `@vue/reactivity` was rebuilt on [alien-signals](https://github.com/stackblitz/alien-signals) for lower memory use and faster updates. No public API changes.

Package facts (from the prepared source):

- Version: `package.json:3`.
- The main entry re-exports `@vue/runtime-dom` AND `@vue/runtime-vapor`, so all Vapor APIs (`createVaporApp`, `vaporInteropPlugin`, `defineVaporComponent`) import from plain `vue`: `dist/vue.d.ts:4-5`.
- Named exports added by the `vue` package itself: `compile`, `defineVaporAsyncComponent`, `withAsyncContext`: `dist/vue.runtime.esm-bundler.js:12`.
- Subpath exports: `vue/server-renderer`, `vue/compiler-sfc`, `vue/jsx-runtime`, `vue/jsx`: `package.json:36-68`.
- TypeScript is an optional peer dependency (`*`): `package.json:107-113`.

## Common tasks

Component with `<script setup>`, reactive props destructure, and `defineModel`:

```vue
<script setup lang="ts">
const { count = 0 } = defineProps<{ count?: number }>()
const model = defineModel<string>({ default: '' })
</script>

<template>
  <input v-model="model" />
  <p>{{ count }}</p>
</template>
```

Template refs (3.5+ pattern):

```ts
import { useTemplateRef } from 'vue'
const input = useTemplateRef('my-input') // matches ref="my-input" in template
```

Watch with cleanup (3.5+):

```ts
import { watch, onWatcherCleanup } from 'vue'
watch(id, () => {
  const controller = new AbortController()
  load(id.value, controller)
  onWatcherCleanup(() => controller.abort())
})
```

Composable that accepts a value, ref, or getter:

```ts
import { toValue, type MaybeRefOrGetter } from 'vue'
function useDouble(source: MaybeRefOrGetter<number>) {
  return computed(() => toValue(source) * 2)
}
```

Lazy hydration for SSR (3.5+):

```ts
import { defineAsyncComponent, hydrateOnVisible } from 'vue'
const Heavy = defineAsyncComponent({
  loader: () => import('./Heavy.vue'),
  hydrate: hydrateOnVisible(),
})
```

## Version rules that change what you write

Full list with citations in [API changes](./references/api-changes.md). The ones that break old code:

- Reactivity Transform (`$ref`, `$computed`) was removed in 3.4. Use plain `ref`/`computed`, or the Vue Macros plugin.
- `@vnodeXXX` listeners are a compiler error since 3.4. Use `@vue:mounted` style listeners.
- Global `JSX` namespace is no longer registered since 3.4. Set `jsxImportSource: "vue"` in tsconfig, or import `vue/jsx`.
- In Vapor components (3.6), Options API, `app.config.globalProperties`, `getCurrentInstance()`, `v-memo`, and `@vue:xxx` element lifecycle events do not work.
- Vapor event delegation is on by default in beta.17: `stopPropagation()` in an ancestor can cancel delegated handlers. Disable per build with `compilerOptions.eventDelegation` (added in beta.15, [#14924](https://github.com/vuejs/core/pull/14924)). Note: rc.2 replaced this with an opt-in `.delegate` modifier ([release notes](https://github.com/vuejs/core/releases/tag/v3.6.0-rc.2)).

## Bundler and dist notes

- Bundlers resolve the runtime-only build; templates in `.vue` files are pre-compiled. For runtime template compilation (in-DOM templates or template strings), alias `vue` to `vue/dist/vue.esm-bundler.js`.
- Replace `__VUE_OPTIONS_API__`, `__VUE_PROD_DEVTOOLS__`, `__VUE_PROD_HYDRATION_MISMATCH_DETAILS__` at build time for correct tree-shaking ([compile-time flags](https://vuejs.org/api/compile-time-flags.html)).
- In Node CJS, importing `vue/compiler-sfc` auto-registers TypeScript via `registerTS(() => require('typescript'))` when resolvable: `compiler-sfc/register-ts.js:1-3`.

Details, dist-file selection, and the export catalog: [API surface](./references/api-surface.md).

## References

- [API surface](./references/api-surface.md): entry points, dist builds, feature flags, export catalog.
- [Vapor Mode](./references/vapor-mode.md): opt-in, interop, constraints, directives, event delegation.
- [API changes 3.4 to 3.6](./references/api-changes.md): new, stable, and removed APIs per version, with citations.
- [Best practices](./references/best-practices.md): composable and performance patterns proven against the official docs.

© skilld-dev · MIT · skilld-dev/vue-ecosystem-skills

Similar skills

Everything for Frontend and UI →

From the same set5

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor