ai-infrastructure-hugg…
Hugging Face Inference SDK patterns for TypeScript/Node.js — InferenceClient setup, chat completion, text generation, streaming, embeddings, image generation,…
VeeValidate v4 patterns - useForm, useField, defineField, useFieldArray, schema validation with Composition API
$ npx -y skills add agents-inc/skills --skill web-forms-vee-validate --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/web-forms-vee-validateContext preview
The summary Claude sees to decide when to auto-load this skill.
VeeValidate v4 patterns - useForm, useField, defineField, useFieldArray, schema validation with Composition API
name: web-forms-vee-validate description: VeeValidate v4 patterns - useForm, useField, defineField, useFieldArray, schema validation with Composition API
> **Quick Guide:** `useForm` owns the form state; `defineField` returns a `[model, attrs]` tuple to > `v-model` onto a native input, and `useField` binds a field inside a reusable input component — > with its name passed as a getter so it stays reactive. A schema reaches `validationSchema` through > `toTypedSchema()`, which is also what supplies the types. `useFieldArray` drives repeatable groups > and iterates on `field.key`. Everything here is v4; v5 removes the adapter, so check > [reference.md](reference.md) before targeting it.
**Detailed Resources:**
---
`v-model` on the returned model. Follow [examples/core.md](examples/core.md).
`() => props.name`. Follow [examples/core.md](examples/core.md) Pattern 3.
rather than a companion to it. Each creates its own form context, so a component that calls `useForm` and also renders `<Form>` has two, and the fields register with whichever they are nested in.
---
<critical_requirements>
**Wrap a schema in `toTypedSchema()` before handing it to `validationSchema`.** The adapter converts the schema's result into the shape the form reads and is what supplies the value types; a raw schema is accepted without complaint and then validates nothing.
**Pass `useField` its name as `() => props.name` or `toRef(props, "name")`.** A plain `props.name` is read once at setup, so the field keeps binding to the name the component first mounted with.
**Give `initialValues` an entry for every field, arrays included.** Field arrays iterate their value and fail on `undefined`, and a cross-field rule is skipped entirely when one of the keys it compares is missing.
**Iterate `useFieldArray` on `field.key`.** It is the identity VeeValidate assigns each entry and it survives insertion and reordering, which a positional index does not.
</critical_requirements>
---
**Auto-detection:** vee-validate, @vee-validate/zod, @vee-validate/yup, @vee-validate/valibot, useForm, useField, defineField, useFieldArray, toTypedSchema, validationSchema, errorBag, handleSubmit, resetForm, setFieldError, setErrors, validateOnValueUpdate, keepValuesOnUnmount, ErrorMessage, useFormContext
**Applies to:**
**Handled elsewhere:**
schema states its rules is settled by whatever owns it.
skill.
---
<philosophy>
Validation is declared once, at the form, and read per field. `useForm` holds the schema and the values; each field asks the form for its own slice, so a field knows its error without knowing the rule that produced it. That is what lets an input component be written without knowing which form it will be dropped into — it takes a name and binds itself.
Reactivity is the thing to keep intact. Everything a field receives from the form is a ref or a getter, and the common failure is flattening one of them: reading `props.name` instead of passing a getter, or unwrapping a computed schema with `.value` before the form can track it.
</philosophy>
---
<decision_framework>
| | `defineField` | `useField` | | ------------ | ------------------------------------------- | --------------------------------------------- | | Returns | `[model, attrs]` for `v-model` and `v-bind` | `value`, `errorMessage`, `meta`, handlers | | Form context | Required — it comes off a `useForm` result | Optional; falls back to standalone validation | | Best for | The form's own template, native inputs | A component that binds itself by name |
`defineField` where the form and the inputs are in one component. `useField` where the input is a component in its own right, or where the binding needs handlers rather than a `v-model`.
</decision_framework>
---
<patterns>
`defineField` returns a tuple: the model for `v-model`, and the attrs carrying the event handlers that drive validation timing.
<script setup lang="ts">
const { handleSubmit, errors, defineField } = useForm({
validationSchema: schema,
initialValues: { email: "", password: "" },
});
const [email, emailAttrs] = defineField("email");
const onSubmit = handleSubmit(async (values) => {
await login(values);
});
</script>
<template>
<input v-model="email" v-bind="emThe official skills marketplace for Agents Inc. 150+ skills covering everything from React and Prisma to Redis, ElevenLabs, and infrastructure tooling. Pick the skills that match your stack and install them via Claude Code. Need more control?
Repo: agents-inc/skills
Hugging Face Inference SDK patterns for TypeScript/Node.js — InferenceClient setup, chat completion, text generation, streaming, embeddings, image generation,…
LiteLLM proxy server setup, TypeScript client patterns via OpenAI SDK, model routing, fallbacks, load balancing, spend tracking, virtual keys, and production…
Serverless GPU compute platform for AI model deployment — web endpoints, GPU functions, model serving, and TypeScript client patterns
Local LLM inference with the Ollama JavaScript client -- chat, streaming, tool calling, vision, embeddings, structured output, model management, and…
Replicate SDK patterns for TypeScript/Node.js -- client setup, predictions, streaming, webhooks, file handling, model versioning, deployments, and training
Together AI SDK patterns for TypeScript — client setup, chat completions, streaming, structured output, function calling, embeddings, image generation,…