new-composable
Standardized generator for Vue 3 composables, enforcing file structure and state management conventions.
Install
mkdir -p .claude/skills/new-composable && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16471" && unzip -o skill.zip -d .claude/skills/new-composable && rm skill.zipInstalls to .claude/skills/new-composable
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Use this skill when the user asks to create a new composable (useX) for the TrackGrowth app — reusable reactive logic such as frequency evaluation, streak calculation, theme, or backup. Triggers on "criar composable", "novo composable", "new composable", "useX".Key capabilities
- →Create new composables for the TrackGrowth app
- →Decide between a composable and a Pinia store
- →Structure `index.ts` for a composable
- →Extract pure business logic to `src/utils/`
- →Create tests for composables
How it works
This skill guides the creation of new Vue composables by defining file location, structure, and testing requirements. It also helps in deciding whether a Pinia store is a more appropriate solution.
Inputs & outputs
When to use new-composable
- →Generate a new reactive composable
- →Standardize composable structure for TrackGrowth app
- →Decide between Pinia store and Vue composable
About this skill
Criar novo composable
Segue as convenções documentadas em docs/context/06-file-structure-conventions.md e docs/context/05-architecture.md (divisão Pinia vs useStorage).
Passos
-
Local do arquivo: pasta própria
src/composables/useX/, nome emcamelCaseprefixado comuse(ex:composables/useHabitFrequency/,composables/useStreak/), contendo:composables/ useX/ index.ts tests/ useX.spec.ts models/ # opcional, só se houver tipos locais ao composable -
Antes de criar, decida se é realmente um composable ou deveria ser um store Pinia (use a skill
/new-storenesse caso):- Composable: lógica reativa reutilizável sem necessidade de estado compartilhado entre componentes distantes na árvore, ou wrapper fino sobre
useStoragedo VueUse para uma preferência simples de UI (tema, filtro selecionado). - Store Pinia: dados de domínio que precisam ser acessados/mutados por múltiplos componentes não relacionados (hábitos, check-ins, tags, gamificação).
- Composable: lógica reativa reutilizável sem necessidade de estado compartilhado entre componentes distantes na árvore, ou wrapper fino sobre
-
Estrutura do
index.ts:import { computed, ref } from "vue"; export function useX() { const state = ref(); const derived = computed(() => { // lógica derivada }); function action() { // lógica de ação } return { state, derived, action }; }- Se o composable envolve lógica de negócio pura (cálculo de streak, avaliação de
FrequencyRule), extraia a função pura parasrc/utils/(ex:frequency-evaluator.ts) e deixe o composable como uma casca reativa fina em cima dela — facilita testar a lógica isoladamente sem montar um componente Vue. - Se o composable precisa de tipos próprios além dos já definidos em
src/types/, adicione-os lá, não inline no composable.
- Se o composable envolve lógica de negócio pura (cálculo de streak, avaliação de
-
Composables de preferência de UI (ex:
useTheme): usaruseStoragedo VueUse diretamente, com uma chave delocalStorageclara e namespaced (ex:trackgrowth:theme), para não colidir com as chaves usadas pelopinia-plugin-persistedstatedos stores de domínio. -
Após criar
index.ts, criartests/useX.spec.tscobrindo o estado/derivações/ações expostos — não é opcional. Depois, rodeyarn lint:fix.
O que não fazer
- Não crie um composable que só reexporta um store Pinia sem adicionar lógica — importe o store diretamente no componente nesse caso.
- Não guarde dados de domínio (hábitos, check-ins) dentro de um composable com
useStorage— isso é responsabilidade dos stores Pinia persistidos, que oferecem getters/ações compartilhados.
When not to use it
- →Creating a composable that only re-exports a Pinia store
- →Storing domain data within a composable using `useStorage`
- →When the logic requires shared state between distant components
Limitations
- →Do not create a composable that only reexports a Pinia store without adding logic.
- →Do not store domain data (habits, check-ins) within a composable with `useStorage`.
- →If the composable needs its own types, add them to `src/types/`, not inline.
How it compares
This skill provides a structured approach to creating composables within the TrackGrowth app, ensuring adherence to architectural conventions and test coverage, unlike ad-hoc composable creation.
Compared to similar skills
new-composable side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| new-composable (this skill) | 0 | 1mo | No flags | Intermediate |
| vue-best-practices | 19 | 5mo | No flags | Intermediate |
| vue-testing-best-practices | 5 | 6mo | No flags | Intermediate |
| vue-debug-guides | 4 | 6mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
vue-best-practices
antfu
MUST be used for Vue.js tasks. Strongly recommends Composition API with `<script setup>` and TypeScript as the standard approach. Covers Vue 3, SSR, Volar, vue-tsc. Load for any Vue, .vue files, Vue Router, Pinia, or Vite with Vue work. ALWAYS use Composition API unless the project explicitly requires Options API.
vue-testing-best-practices
vuejs-ai
Use for Vue.js testing. Covers Vitest, Vue Test Utils, component testing, mocking, testing patterns, and Playwright for E2E testing.
vue-debug-guides
vuejs-ai
Vue 3 debugging and error handling for runtime errors, warnings, async failures, and SSR/hydration issues. Use when diagnosing or fixing Vue issues.
vue-router-best-practices
antfu
Vue Router 4 patterns, navigation guards, route params, and route-component lifecycle interactions.
vueuse
onmax
Use when working with VueUse composables - provides reactive utilities for state, browser APIs, sensors, network, animations. Check VueUse before writing custom composables - most patterns already implemented.
shadcn-vue-admin
Whbbit1999
Build and maintain the shadcn-vue-admin Vue 3 + Vite + TypeScript admin dashboard with shadcn-vue, Tailwind, Pinia, Vue Router, i18n, and TanStack Query. Use for UI/layout changes, page additions, routing updates, theme/auth work, and component integration in this repo.