Vue.js mastery. Composition API, Pinia, Vue Router, Nuxt SSR/SSG, Vite optimization, testing.
From godmodenpx claudepluginhub arbazkhan971/godmodeThis skill uses the workspace's default tool permissions.
Designs and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
/godmode:vue, "Vue app", "Vue component"cat package.json 2>/dev/null \
| grep -E '"vue"|"nuxt"|"@vue/"'
cat node_modules/vue/package.json 2>/dev/null \
| grep '"version"'
Vue version: <2.x / 3.x>
Build tool: Vite | Webpack | Nuxt
API style: Composition | Options | Mixed
State: Pinia | Vuex | none
Router: Vue Router | file-based (Nuxt)
CSS: Tailwind | UnoCSS | SCSS | scoped
TypeScript: yes | no
Meta-framework: Nuxt 3 | none
IF starting fresh: "Need SSR? Use Nuxt."
| Factor | Composition API | Options API |
|-------------|-----------------|-------------|
| Vue version | Vue 3 (native) | Vue 2 & 3 |
| TypeScript | Excellent | Requires decorators|
| Logic reuse | Composables | Mixins (fragile)|
| Organization| By feature | By option type|
| Bundle | Tree-shakeable | Full runtime |
| Complex comp| Scales well | Gets unwieldy|
IF new Vue 3 project: Composition API + <script setup>
IF existing Vue 2: keep Options unless migrating
IF mixed codebase: plan migration, don't stay mixed
WHEN team is new to Vue: Options first, then migrate
<script setup lang="ts">
import { ref, computed, onMounted } from 'vue'
import type { User } from '@/types'
const props = defineProps<{ userId: string }>()
const emit = defineEmits<{ save: [user: User] }>()
</script>
Composable rules:
use prefix: useAuth, useCart| Store | Purpose | Persistence |
|--------------|---------------|-------------|
| useAuthStore | Authentication| localStorage |
| useUserStore | User profile | Session only |
| useCartStore | Shopping cart | localStorage |
Rules:
| Path | Component | Guard |
|---------------|-----------|-------------|
| / | Home.vue | none |
| /dashboard | Dashboard | auth-required|
| /admin/* | Admin | admin-only |
| /:pathMatch(*)| NotFound | none |
Rules:
| Route | Strategy | Reason |
|---------------|---------|---------------|
| / | SSG | Static, fast |
| /blog/:slug | ISR 60s | Content, SEO |
| /dashboard | SPA | Auth-gated |
| /products/:id | SSR | Dynamic, SEO |
// nuxt.config.ts
export default defineNuxtConfig({
routeRules: {
'/': { prerender: true },
'/blog/**': { isr: 60 },
'/dashboard/**': { ssr: false },
}
})
Rules:
# Run unit/component tests
npx vitest run
# Run e2e tests
npx playwright test
# Type check
npx vue-tsc --noEmit
Coverage target: >80% statements, >70% branches.
| Check | Status |
|-------------------------------|--------|
| API style consistent | PASS |
| <script setup> used | PASS |
| TypeScript strict | PASS |
| Composables use* convention | PASS |
| Pinia setup syntax | PASS |
| Routes lazy-loaded | PASS |
| Props typed (defineProps<T>) | PASS |
| Emits typed (defineEmits<T>) | PASS |
| No v-html with user input | PASS |
| Every v-for has :key | PASS |
Log to .godmode/vue-results.tsv:
timestamp\taction\tcomponents\tstores\tcomposables\tstatus
Print: Vue: {action}. Components: {N}. Stores: {N}. vue-tsc: {status}. Status: {DONE|PARTIAL}.
KEEP if: vue-tsc passes AND tests pass
AND audit shows no regressions
DISCARD if: type errors OR test failures
OR bundle exceeds budget. Revert immediately.
STOP when:
- All audit checks PASS
- vue-tsc --noEmit exits 0
- vitest run exits 0
- No v-for without :key, no v-html, no mixins