.agents/skills/inertia-vue-development/SKILL.md
Develops Inertia.js v2 Vue client-side applications. Activates when creating Vue pages, forms, or navigation; using <Link>, <Form>, useForm, or router; working with deferred props, prefetching, or polling; or when user mentions Vue with Inertia, Vue pages, Vue forms, or Vue navigation.
npx skillsauth add keepanitreel/lexawell inertia-vue-developmentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Activate this skill when:
<Form> or useForm)<Link> or routerUse search-docs for detailed Inertia v2 Vue patterns and documentation.
Vue page components should be placed in the resources/js/pages directory.
Important: Vue components must have a single root element.
<code-snippet name="Basic Vue Page Component" lang="vue"> <script setup> defineProps({ users: Array }) </script> <template> <div> <h1>Users</h1> <ul> <li v-for="user in users" :key="user.id"> {{ user.name }} </li> </ul> </div> </template> </code-snippet>Use <Link> for client-side navigation instead of traditional <a> tags:
Prefetch pages to improve perceived performance:
<code-snippet name="Prefetch on Hover" lang="vue"> <script setup> import { Link } from '@inertiajs/vue3' </script> <template> <Link href="/users" prefetch> Users </Link> </template> </code-snippet>The recommended way to build forms is with the <Form> component:
<input type="email" name="email" />
<div v-if="errors.email">{{ errors.email }}</div>
<button type="submit" :disabled="processing">
{{ processing ? 'Creating...' : 'Create User' }}
</button>
<div v-if="wasSuccessful">User created!</div>
</Form>
</template>
</code-snippet>
<button type="submit" :disabled="processing">
{{ processing ? 'Saving...' : 'Save' }}
</button>
<progress v-if="progress" :value="progress.percentage" max="100">
{{ progress.percentage }}%
</progress>
<div v-if="wasSuccessful">Saved!</div>
</Form>
</template>
</code-snippet>
The <Form> component supports automatic resetting:
resetOnError - Reset form data when the request failsresetOnSuccess - Reset form data when the request succeedssetDefaultsOnSuccess - Update default values on successUse the search-docs tool with a query of form component resetting for detailed guidance.
<button type="submit" :disabled="processing">
Submit
</button>
</Form>
</template>
</code-snippet>
Forms can also be built using the useForm composable for more programmatic control. Use the search-docs tool with a query of useForm helper for guidance.
useForm ComposableFor more programmatic control or to follow existing conventions, use the useForm composable:
<input type="email" v-model="form.email" />
<div v-if="form.errors.email">{{ form.errors.email }}</div>
<input type="password" v-model="form.password" />
<div v-if="form.errors.password">{{ form.errors.password }}</div>
<button type="submit" :disabled="form.processing">
Create User
</button>
</form>
</template>
</code-snippet>
Use deferred props to load data after initial page render:
<code-snippet name="Deferred Props with Empty State" lang="vue"> <script setup> defineProps({ users: Array }) </script> <template> <div> <h1>Users</h1> <div v-if="!users" class="animate-pulse"> <div class="h-4 bg-gray-200 rounded w-3/4 mb-2"></div> <div class="h-4 bg-gray-200 rounded w-1/2"></div> </div> <ul v-else> <li v-for="user in users" :key="user.id"> {{ user.name }} </li> </ul> </div> </template> </code-snippet>Automatically refresh data at intervals:
<code-snippet name="Polling Example" lang="vue"> <script setup> import { router } from '@inertiajs/vue3' import { onMounted, onUnmounted } from 'vue' defineProps({ stats: Object }) let interval onMounted(() => { interval = setInterval(() => { router.reload({ only: ['stats'] }) }, 5000) // Poll every 5 seconds }) onUnmounted(() => { clearInterval(interval) }) </script> <template> <div> <h1>Dashboard</h1> <div>Active Users: {{ stats.activeUsers }}</div> </div> </template> </code-snippet>Load more data when user scrolls to a specific element:
<code-snippet name="Infinite Scroll with WhenVisible" lang="vue"> <script setup> import { WhenVisible } from '@inertiajs/vue3' defineProps({ users: Object }) </script> <template> <div> <div v-for="user in users.data" :key="user.id"> {{ user.name }} </div> <WhenVisible
v-if="users.next_page_url"
data="users"
:params="{ page: users.current_page + 1 }"
>
<template #fallback>
<div>Loading more...</div>
</template>
</WhenVisible>
</div>
</template>
</code-snippet>
Server-side patterns (Inertia::render, props, middleware) are covered in inertia-laravel guidelines.
<a> links instead of Inertia's <Link> component (breaks SPA behavior)undefined state of deferred props before data loads<form> without preventing default submission (use <Form> component or @submit.prevent)<Form> component is available in your Inertia versiontools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.