К основному содержанию
скилл CX Codex

pinia-skilld — скилл для Claude Code: Pinia 4.x без ошибок

Скилл для ИИ-агентов, который подсказывает верные API Pinia 4.x: хранилища, геттеры, действия, SSR и миграцию с v2 и v3.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add skilld-dev/vue-ecosystem-skills --skill pinia-skilld -a claude-code
Открыть на GitHub

Что делает pinia-skilld

Правила скилла включаются, когда код импортирует pinia. Агент получает справку по option- и setup-хранилищам, состоянию, геттерам, действиям, подпискам, плагинам, гидратации в SSR и тестированию. Отдельно разобраны map-хелперы для Options API и диагностика v4.

Внутри — набор справочных файлов: поверхность API с сигнатурами, хранилища, подписки, плагины, SSR, тестирование, Options API и каталог диагностик. Источники — подготовленный код pinia 4.0.3 и официальная документация.

Установка потребует @vue/devtools-api версии ^8.1.5 рядом с pinia, потому что в v4 он стал обязательным peer-пакетом. Пакет поставляется только как ESM, поэтому require() в старом CommonJS-коде сломается. Нужен Vue ^3.5.11; Vue 2 не поддерживается с третьей версии. Для Nuxt берите @pinia/nuxt 1.x, для тестов — @pinia/testing 2.x.

Какие задачи решает

  • написать setup-хранилище и не потерять реактивность при деструктуризации
  • починить $reset(), который падает на setup-хранилище
  • настроить гидратацию состояния в SSR без утечки между запросами
  • перевести проект с defineStore({ id: 'x' }) на новый синтаксис
  • разобраться, почему после обновления до v4 ломается require()

Примеры запросов агенту

  • добавь хранилище todos на setup-синтаксисе с геттером done
  • почему $reset() бросает ошибку в моём setup-хранилище?
  • перенеси хранилище counter с pinia v2 на v4

Как установить pinia-skilld

1Через Skills CLI (Vercel)

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

2Вручную: положить файлы

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

Папка скилла целиком; для одного проекта — .claude/skills/pinia-skilld/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о pinia-skilld

Как установить pinia-skilld в Claude?

Выполните npx skills add skilld-dev/vue-ecosystem-skills --skill pinia-skilld -a claude-code. Файл скилла окажется в ~/.claude/skills/pinia-skilld/SKILL.md.

Что делает pinia-skilld?

Даёт агенту верные примеры работы с Pinia 4.x: объявление хранилищ, подписки, плагины, SSR, тесты и map-хелперы. Плюс подсказки по миграции с v2 и v3.

Что нужно поставить вместе с pinia?

@vue/devtools-api версии ^8.1.5 — в v4 это обязательный peer-пакет: npm install pinia @vue/devtools-api. TypeScript нужен версии >=5.6.0, но он необязателен.

Исходный текст

SKILL.md · MIT
---
name: pinia-skilld
description: "Use when writing, debugging, or refactoring code that imports \"pinia\", the Vue 3 store library. Covers pinia 4.x: option and setup stores, state, getters, actions, subscriptions, plugins, SSR hydration, testing, Options API map helpers, and v4 nostics diagnostics. Provides version-correct API usage and migration notes from v2 and v3."
license: MIT
---

# [email protected]

Source citations use package-relative paths from the prepared pinia 4.0.3 source: `package.json`, `README.md`, `dist/pinia.js` (runtime), `dist/pinia.d.ts` (types). Other citations are official documentation URLs.

## Requirements

- Vue `^3.5.11` peer [package.json:62]. Vue 2 is unsupported since v3.
- `@vue/devtools-api` `^8.1.5` is a required, non-optional peer [package.json:60-68]. Install it alongside pinia: `npm install pinia @vue/devtools-api` [README.md:108-111], v4.0.0 release notes.
- TypeScript `>=5.6.0` optional peer [package.json:69-71].
- ESM-only package: `"type": "module"`, single export `.` to `dist/pinia.js` [package.json:42,47-50]. v4 removed CJS resolution; a require() fallback breaks.
- `@pinia/nuxt` 1.x and `@pinia/testing` 2.x are the companion versions for pinia 4 (https://github.com/vuejs/pinia/releases).

## Install and setup

```ts
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'

const pinia = createPinia()
const app = createApp(App)
app.use(pinia)
app.mount('#app')
```

From [README.md:119-130]. In dev on the client, `createPinia()` registers the devtools plugin itself [dist/pinia.js:832,847].

## Define a store

Two syntaxes. The id is a unique string, first argument in both [dist/pinia.d.ts:645,653].

```ts
import { defineStore } from 'pinia'

// Option store: state/getters/actions
export const useCounterStore = defineStore('counter', {
  state: () => ({ count: 0 }),
  getters: {
    doubleCount: (state) => state.count * 2,
  },
  actions: {
    increment() {
      this.count++
    },
  },
})

// Setup store: refs are state, computed are getters, functions are actions
export const useTodos = defineStore('todos', () => {
  const todos = ref<Todo[]>([])
  const done = computed(() => todos.value.filter((t) => t.done))
  function add(todo: Todo) {
    todos.value.push(todo)
  }
  return { todos, done, add }
})
```

Rules for setup stores [dist/pinia.js:1178-1202]:
- `ref()` and `reactive()` become state.
- `computed()` becomes a getter.
- Functions become actions, wrapped automatically for `$onAction`.
- Return every state property. Pinia only picks up returned state, so private state breaks SSR hydration and devtools.

The setup function receives helpers: `defineStore('id', ({ action }) => { ... })` [dist/pinia.js:1177, dist/pinia.d.ts:628-638]. `action(fn, name?)` makes a helper function trackable by `$onAction` when called within the store. Rarely needed; intended for advanced cases like Pinia Colada.

## Use a store

Call `useStore()` inside `setup()` (or any composable). Every call returns the same store instance.

```ts
const counter = useCounterStore()

counter.count++            // direct state mutation
counter.doubleCount        // getter
counter.increment()        // action

const { count, doubleCount } = storeToRefs(counter) // refs for destructuring
```

`storeToRefs()` converts state and getters to refs. It ignores actions and non-reactive properties [dist/pinia.js:1475-1489]. Destructure with it, never plain `toRefs()` or `...store`, when you need reactivity.

Common operations:
- Group changes into one devtools entry with `store.$patch(obj)` or `$patch(fn)`. The function form must be synchronous [dist/pinia.d.ts:219-225] and suits array, Map, and Set edits [dist/pinia.js:964-975].
- `$reset()` exists only on option stores. On a setup store it throws in dev [dist/pinia.js:1085-1087]; implement your own `$reset` in the returned object.
- Assigning `store.$state = {...}` does not replace state; it calls `$patch` internally [dist/pinia.js:1207-1216].
- Declare every state key in `state()` (or return it from setup), even when the initial value is `undefined`. New keys added later are not reactive.
- Outside a component, pass the pinia instance: `useStore(pinia)`. On the server this is mandatory; skipping it risks cross-request state pollution [dist/pinia.js:37-39].

Details: [stores](./references/stores.md), [subscriptions](./references/subscriptions.md).

## Version notes and migration

v4.0.0, technically breaking only (https://github.com/vuejs/pinia/releases/tag/v4.0.0):
- ESM-only distribution.
- `@vue/devtools-api` upgraded to v8 and now a required install.
- Errors and dev warnings refactored onto Nostics diagnostics, codes `PINIA_R1001` to `PINIA_R1007` [dist/pinia.js:18-56]. See [diagnostics](./references/diagnostics.md).
- `piniaSymbol` is now part of the public exports [dist/pinia.js:1491].
- `storeToRefs()` skips nullish values gracefully; `$subscribe()` ignores a duplicate callback instead of stacking a second watcher.

Still relevant from v3.0.0 (https://pinia.vuejs.org/cookbook/migration-v2-v3.html):
- `defineStore({ id: 'x', ... })` object-only signature removed. Use `defineStore('x', { ... })`.
- `PiniaStorePlugin` type removed. Use `PiniaPlugin`.
- Vue 2 support dropped. Vue 2 users stay on pinia v2.

## Reference files

- [API surface](./references/api.md): every public export with signatures and type helpers.
- [Stores](./references/stores.md): state, getters, actions, typing, composing stores, HMR.
- [Subscriptions](./references/subscriptions.md): `$subscribe`, `$onAction`, `MutationType`, detached and flush options.
- [Plugins](./references/plugins.md): `pinia.use()`, context, typing extensions, new state and options.
- [SSR](./references/ssr.md): hydration, `skipHydrate`, per-request pinia, Nuxt.
- [Testing](./references/testing.md): `setActivePinia`, `@pinia/testing` 2.x usage.
- [Options API](./references/options-api.md): map helpers without `setup()`.
- [Diagnostics](./references/diagnostics.md): dev-only `PINIA_R100x` catalog with fixes.

Official docs: https://pinia.vuejs.org

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

Похожие скиллы

Всё по теме «Фронтенд и UI» →
pinia Anthony Fu Скилл Pinia добавляет в Claude Code справку по официальной библиотеке управления состоянием Vue. Помогает при создании хранилищ, работе с состоянием, геттерами и действиями в Vue-приложениях. CX Codex +1 19 700установок vue-pinia-best-practices github.com/vuejs-ai Скилл с лучшими практиками Pinia: как избежать ошибок при настройке хранилищ, сохранить реактивность и правильно организовать state management в Vue-проекте. CX Codex +1 16 900установок nuxt-data Claude Skills Maintainers Скилл для работы с данными в Nuxt 4: композаблы, useFetch и useAsyncData, состояние через useState и Pinia. CX Codex +1 388установок unit-test-vue-pinia официальный github Помогает писать и проверять юнит-тесты для Vue 3, TypeScript, Vitest и Pinia. Пригодится, когда тесты уже есть, но лезут во внутренности компонентов. 1 800установок vuejs-typescript-best-practices Mindrally Задаёт агенту свод правил по Vue.js и TypeScript: Composition API, Pinia, VueUse, Tailwind и оптимизация сборки Vite. Пригодится, когда проект на Vue растёт и хочется единый стиль кода. CX Codex +1 1 000установок vue официальный github Правило задаёт Copilot стандарты Vue 3: Composition API, <script setup>, реактивность, Pinia и Vue Router. Пригодится, когда агент пишет компоненты в вашем стиле. ★ 40 418звёзд репо

Из того же набора5

Спонсоры проекта

Компании, которые помогают держать аналитику открытой