Agent skill

React Hook Form Zod

by secondsky in secondsky/claude-skills

Type-safe React forms with React Hook Form and Zod validation.

MITAuto-check passedFrontend & Design

Install React Hook Form Zod

skills CLI
$ npx skills add secondsky/claude-skills --skill react-hook-form-zod -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install secondsky/claude-skills react-hook-form-zod --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/react-hook-form-zod/skills/react-hook-form-zod .claude/skills/react-hook-form-zod && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
react-hook-form-zod
GitHub stars
227
Token cost
~4.8k tokens
SKILL.md length
918 words
Files
19 (incl. scripts, references)
Skills in repo
169
Repo updated
First seen
Licence
MIT

At a glance

Type-safe React forms with React Hook Form and Zod validation.

  • Works in 3 steps: Install Packages → Create Your First Form → Add Server-Side Validation
  • Multi-step forms
  • SKILL.md covers Quick Start (10 Minutes), Core Concepts, Critical Rules and Top 5 Critical Errors, plus 7 more sections
  • Runs Shell scripts from its folder; calls bun

What it does

React Hook Form Zod is an agent skill from secondsky/claude-skills. Type-safe React forms with React Hook Form and Zod validation. Use for form schemas, field arrays, multi-step forms, or encountering validation errors, resolver issues, nested field problems.

Its SKILL.md is about 4.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 21 other files, including scripts and reference files (for example `references/accessibility.md`, `references/error-handling.md` and `references/links-to-official-docs.md`).

It sits in Frontend & Design, covering React components, Forms and validation and Type safety. It works with Zod and React. The repository describes itself as: Production-ready skills for Claude Code CLI - Cloudflare, React, Tailwind v4, and AI integrations. The licence is MIT.

When your agent uses it

  • Multi-step forms
  • Encountering validation errors
  • Resolver issues
  • Nested field problems

Example prompts

  • “/react-hook-form-zod”

Requirements

  • A Bash shell

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Install Packages
  2. Create Your First Form
  3. Add Server-Side Validation

What it can do on your machine

Read from SKILL.md and the folder at commit 8837836. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Shell, from the files we listed), which the agent can run.

    Shell commands in SKILL.md call:

    • bun

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com
    • react-hook-form.com
    • zod.dev
    • ui.shadcn.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

React Hook Form Zod loads about 4.8k tokens when it runs, and up to ~19k if it reads all its reference files. Until then it costs about 53 tokens; SKILL.md has 918 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~53
When it runs · the whole SKILL.md, loaded when a task matches
~4.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~19k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from secondsky/claude-skills at commit 8837836, republished under its MIT licence (© secondsky). 918 words, ~4,756 tokens.

Download SKILL.mdSave it as .claude/skills/react-hook-form-zod/SKILL.md (or your agent's skills folder). This skill also uses 18 other files; get the full folder from GitHub.
name
react-hook-form-zod
description
Type-safe React forms with React Hook Form and Zod validation. Use for form schemas, field arrays, multi-step forms, or encountering validation errors, resolver issues, nested field problems.
metadata.keywords
react-hook-form, useForm, zod validation, zodResolver, @hookform/resolvers, form schema, register, handleSubmit, formState, useFieldArray, useWatch…
license
MIT

React Hook Form + Zod Validation

Status: Production Ready ✅ Last Updated: 2025-11-21 Dependencies: None (standalone) Latest Versions: react-hook-form@7.84.0, zod@4.3.6, @hookform/resolvers@5.2.2


Quick Start (10 Minutes)

1. Install Packages
bash
bun add react-hook-form@7.84.0 zod@4.3.6 @hookform/resolvers@5.2.2

Why These Packages:

  • react-hook-form: Performant, flexible forms with minimal re-renders
  • zod: TypeScript-first schema validation with type inference
  • @hookform/resolvers: Adapter connecting Zod to React Hook Form
2. Create Your First Form
typescript
import { useForm } from 'react-hook-form'
import { zodResolver } from '@hookform/resolvers/zod'
import { z } from 'zod'

// 1. Define validation schema
const loginSchema = z.object({
  email: z.email({ error: 'Invalid email address' }),
  password: z.string().min(8, 'Password must be at least 8 characters'),
})

// 2. Infer TypeScript type from schema
type LoginFormData = z.infer<typeof loginSchema>

function LoginForm() {
  // 3. Initialize form with zodResolver
  const {
    register,
    handleSubmit,
    formState: { errors, isSubmitting },
  } = useForm<LoginFormData>({
    resolver: zodResolver(loginSchema),
    defaultValues: {
      email: '',
      password: '',
    },
  })

  // 4. Handle form submission
  const onSubmit = async (data: LoginFormData) => {
    // Data is guaranteed to be valid here
    console.log('Valid data:', data)
  }

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <div>
        <label htmlFor="email">Email</label>
        <input id="email" type="email" {...register('email')} />
        {errors.email && (
          <span role="alert" className="error">
            {errors.email.message}
          </span>
        )}
      </div>

      <div>
        <label htmlFor="password">Password</label>
        <input id="password" type="password" {...register('password')} />
        {errors.password && (
          <span role="alert" className="error">
            {errors.password.message}
          </span>
        )}
      </div>

      <button type="submit" disabled={isSubmitting}>
        {isSubmitting ? 'Logging in...' : 'Login'}
      </button>
    </form>
  )
}

CRITICAL:

  • Always set defaultValues to prevent "uncontrolled to controlled" warnings
  • Use zodResolver(schema) to connect Zod validation
  • Type form with z.infer<typeof schema> for full type safety
  • Validate on both client AND server (never trust client validation alone)

Template: See templates/basic-form.tsx for complete working example

3. Add Server-Side Validation
typescript
// server/api/login.ts
import { z } from 'zod'

// SAME schema on server
const loginSchema = z.object({
  email: z.email({ error: 'Invalid email address' }),
  password: z.string().min(8, 'Password must be at least 8 characters'),
})

export async function loginHandler(req: Request) {
  try {
    const data = loginSchema.parse(await req.json())
    // Data is type-safe and validated
    return { success: true }
  } catch (error) {
    if (error instanceof z.ZodError) {
      return { success: false, errors: z.flattenError(error).fieldErrors }
    }
    throw error
  }
}

Why Server Validation:

  • Client validation can be bypassed (inspect element, Postman, curl)
  • Server validation is your security layer
  • Same Zod schema = single source of truth

Template: See templates/server-validation.tsx


Core Concepts

useForm Hook
typescript
const {
  register,           // Register input fields
  handleSubmit,       // Wrap onSubmit handler
  formState,          // Form state (errors, isValid, isDirty, etc.)
  setValue,           // Set field value programmatically
  getValues,          // Get current form values
  watch,              // Watch field values
  reset,              // Reset form to defaults
  trigger,            // Trigger validation manually
  control,            // For Controller/useController
} = useForm<FormData>({
  resolver: zodResolver(schema),
  mode: 'onSubmit',               // When to validate
  defaultValues: {},              // Initial values (REQUIRED)
})

Validation Modes:

  • onSubmit - Validate on submit (best performance)
  • onChange - Validate on every change (live feedback)
  • onBlur - Validate when field loses focus (good balance)
  • all - Validate on submit, blur, and change

Reference: See references/rhf-api-reference.md for complete API

Zod Schema Basics
typescript
import { z } from 'zod'

// Basic types
const schema = z.object({
  email: z.email({ error: 'Invalid email' }),
  age: z.number().min(18, 'Must be 18+'),
  terms: z.boolean().refine(val => val === true, 'Must accept terms'),
})

// Nested objects
const addressSchema = z.object({
  user: z.object({
    name: z.string(),
    email: z.email(),
  }),
  address: z.object({
    street: z.string(),
    city: z.string(),
    zip: z.string().regex(/^\d{5}$/),
  }),
})

// Arrays
const tagsSchema = z.object({
  tags: z.array(z.string()).min(1, 'At least one tag required'),
})

// Optional and nullable
const optionalSchema = z.object({
  middleName: z.string().optional(),
  nickname: z.string().nullable(),
  bio: z.string().nullish(), // optional AND nullable
})

Reference: See references/zod-schemas-guide.md for complete patterns


Critical Rules

Always Do

✅ Always set defaultValues - Prevents "uncontrolled to controlled" warnings ✅ Use zodResolver for validation - Connects Zod schemas to React Hook Form ✅ Infer types from schema - Use z.infer<typeof schema> for type safety ✅ Validate on server too - Client validation can be bypassed ✅ Use .register() for native inputs - Simple and performant ✅ Use Controller for custom components - For component libraries (MUI, Chakra, etc.) ✅ Handle errors accessibly - Use role="alert" for screen readers ✅ Reset form after submission - Use reset() to clear form state

Form Patterns: See templates/ for:

  • basic-form.tsx - Simple login/register forms
  • advanced-form.tsx - Nested objects, arrays, dynamic fields
  • shadcn-form.tsx - Integration with shadcn/ui
  • multi-step-form.tsx - Wizard/stepper forms
  • async-validation.tsx - Async field validation
Never Do

❌ Never skip defaultValues - Causes "uncontrolled to controlled" errors ❌ Never use only client validation - Security vulnerability ❌ Never mutate form values directly - Use setValue() instead ❌ Never ignore accessibility - Always use proper labels and ARIA ❌ Never forget to disable submit when isSubmitting - Prevents double submissions

Performance: See references/performance-optimization.md for:

  • When to use mode: 'onBlur' vs 'onChange'
  • useWatch vs watch()
  • Re-render optimization strategies

Accessibility: See references/accessibility.md for:

  • Proper label association
  • Error announcement
  • Focus management
  • Keyboard navigation

Top 5 Critical Errors

Error #1: Uncontrolled to Controlled Warning ⚠️

Error:

Warning: A component is changing an uncontrolled input to be controlled

Cause: Not setting defaultValues

Solution:

typescript
// ❌ BAD
const form = useForm()

// ✅ GOOD
const form = useForm({
  defaultValues: {
    email: '',
    password: '',
  }
})

Error #2: Zod v4 Type Inference Issues

Error: Type inference doesn't work correctly

Solution:

typescript
// Explicitly type useForm if needed
const form = useForm<z.infer<typeof schema>>({
  resolver: zodResolver(schema),
})

Source: GitHub Issue #13109


Error #3: Resolver Not Found

Error:

Module not found: Can't resolve '@hookform/resolvers/zod'

Solution:

bash
# Install the resolvers package
bun add @hookform/resolvers@5.2.2

Error #4: Array Field Issues

Error: Dynamic array fields not working with useFieldArray

Solution:

typescript
const { fields, append, remove } = useFieldArray({
  control,
  name: "items" // Must match schema field name exactly
})

Template: See templates/dynamic-fields.tsx


Error #5: Custom Component Validation Fails

Error: Third-party component (MUI, Chakra) doesn't validate

Solution: Use Controller instead of register:

typescript
<Controller
  name="date"
  control={control}
  render={({ field }) => (
    <DatePicker {...field} />
  )}
/>

Reference: See references/error-handling.md for all patterns


All 12 Errors: See references/top-errors.md for complete documentation


Common Patterns

Basic Form
typescript
import { useForm } from 'react-hook-form'
import { zodResolver } from '@hookform/resolvers/zod'
import { z } from 'zod'

const schema = z.object({
  name: z.string().min(1, 'Name required'),
  email: z.email({ error: 'Invalid email' }),
})

type FormData = z.infer<typeof schema>

function MyForm() {
  const { register, handleSubmit, formState: { errors } } = useForm<FormData>({
    resolver: zodResolver(schema),
    defaultValues: { name: '', email: '' }
  })

  const onSubmit = (data: FormData) => console.log(data)

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input {...register('name')} />
      {errors.name && <span>{errors.name.message}</span>}
      <button type="submit">Submit</button>
    </form>
  )
}

Template: See templates/basic-form.tsx


Dynamic Fields (useFieldArray)
typescript
import { useForm, useFieldArray } from 'react-hook-form'

const schema = z.object({
  items: z.array(
    z.object({
      name: z.string(),
      quantity: z.number().min(1)
    })
  ).min(1, 'At least one item required')
})

function DynamicForm() {
  const { control, handleSubmit } = useForm({
    resolver: zodResolver(schema),
    defaultValues: { items: [{ name: '', quantity: 1 }] }
  })

  const { fields, append, remove } = useFieldArray({
    control,
    name: 'items'
  })

  return (
    <form>
      {fields.map((field, index) => (
        <div key={field.id}>
          <input {...register(`items.${index}.name`)} />
          <button onClick={() => remove(index)}>Remove</button>
        </div>
      ))}
      <button onClick={() => append({ name: '', quantity: 1 })}>
        Add Item
      </button>
    </form>
  )
}

Template: See templates/dynamic-fields.tsx


Async Validation
typescript
const schema = z.object({
  username: z.string()
    .min(3)
    .refine(async (username) => {
      const response = await fetch(`/api/check-username?username=${username}`)
      const { available } = await response.json()
      return available
    }, 'Username already taken')
})

Template: See templates/async-validation.tsx


Multi-Step Form
typescript
function MultiStepForm() {
  const [step, setStep] = useState(1)
  const form = useForm({
    resolver: zodResolver(schema),
    mode: 'onBlur' // Validate each step before proceeding
  })

  const onSubmit = async (data) => {
    if (step < 3) {
      setStep(step + 1)
    } else {
      // Final submission
      await submitForm(data)
    }
  }

  return (
    <form onSubmit={form.handleSubmit(onSubmit)}>
      {step === 1 && <Step1Fields />}
      {step === 2 && <Step2Fields />}
      {step === 3 && <Step3Fields />}
      <button type="submit">
        {step < 3 ? 'Next' : 'Submit'}
      </button>
    </form>
  )
}

Template: See templates/multi-step-form.tsx


shadcn/ui Integration

typescript
import { useForm } from 'react-hook-form'
import { zodResolver } from '@hookform/resolvers/zod'
import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'

function ShadcnForm() {
  const form = useForm({
    resolver: zodResolver(schema),
    defaultValues: { email: '' }
  })

  return (
    <Form {...form}>
      <form onSubmit={form.handleSubmit(onSubmit)}>
        <FormField
          control={form.control}
          name="email"
          render={({ field }) => (
            <FormItem>
              <FormLabel>Email</FormLabel>
              <FormControl>
                <Input {...field} />
              </FormControl>
              <FormMessage />
            </FormItem>
          )}
        />
      </form>
    </Form>
  )
}

Reference: See references/shadcn-integration.md for complete patterns Template: See templates/shadcn-form.tsx


Using Bundled Resources

Templates (templates/)

Copy-paste ready examples:

  • basic-form.tsx - Simple login/register forms with validation
  • advanced-form.tsx - Nested objects, arrays, conditional fields
  • shadcn-form.tsx - shadcn/ui Form component integration
  • multi-step-form.tsx - Wizard/stepper forms with step validation
  • dynamic-fields.tsx - useFieldArray for dynamic form fields
  • async-validation.tsx - Async field validation (username check, etc.)
  • server-validation.tsx - Server-side validation with Zod
  • custom-error-display.tsx - Custom error message components
  • package.json - Package versions and scripts
Show full SKILL.md (375 more words)Show less
References (references/)

Detailed documentation:

  • top-errors.md - All 12 common errors with solutions and sources
  • rhf-api-reference.md - Complete React Hook Form API reference
  • zod-schemas-guide.md - Comprehensive Zod schema patterns
  • shadcn-integration.md - shadcn/ui Form integration guide
  • error-handling.md - Error display patterns and accessibility
  • performance-optimization.md - Re-render optimization strategies
  • accessibility.md - WCAG compliance and screen reader support
  • links-to-official-docs.md - Organized official documentation links

When to Load References

ReferenceLoad When...
top-errors.mdDebugging validation issues, type errors, or "uncontrolled to controlled" warnings
rhf-api-reference.mdNeed complete API for useForm, register, Controller, formState
zod-schemas-guide.mdBuilding complex schemas (nested, arrays, conditional, async validation)
shadcn-integration.mdUsing shadcn/ui Form, FormField, FormItem components
error-handling.mdCustom error display, validation timing, error message patterns
performance-optimization.mdForm re-renders too much, optimizing watch/useWatch
accessibility.mdWCAG compliance, screen readers, keyboard navigation
links-to-official-docs.mdNeed official documentation links

Performance Tips

Quick Tips:

  • Use mode: 'onBlur' for balance between UX and performance
  • Use useWatch instead of watch() for specific fields
  • Memoize validation schemas outside component
  • Use shouldUnregister: false for conditional fields
  • Avoid watch() without arguments (watches all fields)

Reference: See references/performance-optimization.md for complete strategies


Accessibility

Quick Checklist:

  • ✅ Use <label htmlFor="fieldId"> for all inputs
  • ✅ Add role="alert" to error messages
  • ✅ Use aria-invalid="true" on invalid fields
  • ✅ Ensure keyboard navigation works (Tab, Enter, Escape)
  • ✅ Provide clear, actionable error messages

Reference: See references/accessibility.md for WCAG compliance guide


Validation Schemas (Zod)

Common Patterns:

typescript
// Email
z.email({ error: 'Invalid email' })

// Password (min 8 chars, 1 uppercase, 1 number)
z.string()
  .min(8)
  .regex(/[A-Z]/, 'Need uppercase')
  .regex(/[0-9]/, 'Need number')

// URL
z.url({ error: 'Invalid URL' })

// Date
z.datetime() // ISO 8601
z.date() // JS Date object

// File upload
z.instanceof(File)
  .refine(file => file.size <= 5000000, 'Max 5MB')
  .refine(
    file => ['image/jpeg', 'image/png'].includes(file.type),
    'Only JPEG/PNG allowed'
  )

// Custom validation
z.string().refine(
  val => val !== 'admin',
  'Username "admin" is reserved'
)

// Async validation
z.string().refine(
  async (username) => {
    const available = await checkUsername(username)
    return available
  },
  'Username already taken'
)

Reference: See references/zod-schemas-guide.md for all patterns


Dependencies

Required:

  • react-hook-form@7.84.0 - Form state management
  • zod@4.3.6 - Schema validation
  • @hookform/resolvers@5.2.2 - Validation adapter

Optional:

  • @radix-ui/react-label@latest - For shadcn/ui integration
  • class-variance-authority@latest - For shadcn/ui styling

Official Documentation

Reference: See references/links-to-official-docs.md for organized links


Troubleshooting

"Uncontrolled to controlled" warning

Solution: Always set defaultValues → See references/top-errors.md #2

Type inference issues with Zod v4

Solution: Explicitly type useForm<z.infer<typeof schema>> → See references/top-errors.md #1

Resolver not found error

Solution: Install @hookform/resolvers package → See references/top-errors.md #3

Custom component doesn't validate

Solution: Use Controller instead of register → See references/top-errors.md #5

Form re-renders too much

Solution: Use mode: 'onBlur' and useWatch → See references/performance-optimization.md


Production Example

This skill is based on production patterns from:

  • Real-world forms: Login, registration, checkout, multi-step wizards
  • Validation: Client + server with shared Zod schemas
  • Accessibility: WCAG 2.1 AA compliant
  • Performance: Optimized for minimal re-renders

Token Savings: ~60% (comprehensive form patterns with templates) Error Prevention: 100% (all 12 documented issues with solutions) Ready for production! ✅

© secondsky, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 18 other files (scripts, references) in plugins/react-hook-form-zod/skills/react-hook-form-zod of secondsky/claude-skills.

  • SKILL.md
  • references/accessibility.md
  • references/error-handling.md
  • references/links-to-official-docs.md
  • references/performance-optimization.md
  • references/rhf-api-reference.md
  • references/shadcn-integration.md
  • references/top-errors.md
  • references/zod-schemas-guide.md
  • scripts/check-versions.sh
  • templates/advanced-form.tsx
  • templates/async-validation.tsx
  • templates/basic-form.tsx
  • templates/custom-error-display.tsx
  • templates/dynamic-fields.tsx
  • templates/multi-step-form.tsx
  • templates/package.json
  • templates/server-validation.tsx
  • … and 1 more

Open the folder on GitHubat commit 8837836

Compare with similar skills

React Hook Form Zod next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

React Hook Form Zod compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
React Hook Form Zod this skillsecondsky/claude-skills227—~4.8kAutomated safety check: PassMIT
Buzzformbuildnbuzz/buzzform101—~1.5kAutomated safety check: PassMIT
Opik Frontend Patternscomet-ml/opik22k—~1.1kAutomated safety check: PassApache-2.0
Frontend Patterns Templatebybren-llc/safe-agentic-workflow421—~2kAutomated safety check: PassMIT
Typescript Patternssoftspark/ai-toolkit179—~1.6kAutomated safety check: PassApache-2.0
Olore Tanstack Form Latestolorehq/olore103—~1.1kAutomated safety check: PassMIT

Similar skills

  • Buzzform

    buildnbuzz/buzzform

    A skill your agent uses when working with BuzzForm schema-driven forms, @buildnbuzz/form-core, @buildnbuzz/form-react, or any related APIs like defineSchema, InferType, FormProvider, useDataField…

    101 GitHub stars~1.5k tokensUpdated 4 mo ago
    Frontend & DesignAuto-check passed
  • Sets the conventions for the Opik React frontend: TanStack Query for data, Zustand for shared state, one-way layer imports and a fix for Google Translate crashes.

    22k GitHub stars~1.1k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Frontend Patterns Template

    bybren-llc/safe-agentic-workflow

    Frontend patterns for modern web frameworks, component libraries, auth flows, and analytics. Use when building UI components, creating pages, implementing…

    421 GitHub stars~2k tokensUpdated 2 mo ago
    Frontend & DesignAuto-check passed
  • Typescript Patterns

    softspark/ai-toolkit

    TypeScript types: generics, discriminated unions, Zod, satisfies, branded types.

    179 GitHub stars~1.6k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Local TanStack Form documentation reference (latest, v1.33.5).

    103 GitHub stars~1.1k tokensUpdated yesterday
    MobileAuto-check passed
  • Zod

    jasonjgardner/blockbench-mcp-plugin

    Zod schema validation best practices for type safety, parsing, and error handling.

    488 GitHub starsUsed in 3 repos~1.4k tokens
    DevelopmentAuto-check passed

More from secondsky/claude-skills

All 169 skills in this repo
  • Tanstack AI

    secondsky/claude-skills

    TanStack AI (alpha) provider-agnostic type-safe chat with streaming for OpenAI, Anthropic, Gemini, Ollama.

    227 GitHub starsUsed in 1 repo~3.6k tokens
    Auto-check: notes
  • Auto Animate

    secondsky/claude-skills

    AutoAnimate (@formkit/auto-animate) zero-config animations for React.

    227 GitHub stars~2.9k tokensUpdated 9 days ago
    Auto-check passed
  • Base UI React

    secondsky/claude-skills

    MUI Base UI unstyled React components with Floating UI. An agent skill from secondsky/claude-skills.

    227 GitHub stars~1.9k tokensUpdated 9 days ago
    Auto-check passed
  • Cloudflare Images

    secondsky/claude-skills

    This skill should be used when the user asks to "upload images to Cloudflare", "implement direct creator upload", "configure image transformations", "optimize WebP/AVIF", "create image variants"…

    227 GitHub stars~3.6k tokensUpdated 9 days ago
    Auto-check: notes
  • Cloudflare Nextjs

    secondsky/claude-skills

    Deploy Next.js to Cloudflare Workers via the OpenNext adapter (@opennextjs/cloudflare).

    227 GitHub stars~5.3k tokensUpdated 9 days ago
    Auto-check: notes
  • Cloudflare Sandbox

    secondsky/claude-skills

    Cloudflare Sandboxes SDK for secure code execution in Linux containers at edge.

    227 GitHub stars~4.5k tokensUpdated 9 days ago
    Auto-check passed

Works with

Questions about React Hook Form Zod

What does React Hook Form Zod do?

Type-safe React forms with React Hook Form and Zod validation. React Hook Form Zod is an agent skill from secondsky/claude-skills. Type-safe React forms with React Hook Form and Zod validation.

When should I use React Hook Form Zod?

React Hook Form Zod fits situations like: multi-step forms; encountering validation errors; resolver issues; nested field problems.

How do I install React Hook Form Zod in Claude Code?

Run `npx skills add secondsky/claude-skills --skill react-hook-form-zod -a claude-code`. Or copy the skill folder (plugins/react-hook-form-zod/skills/react-hook-form-zod in secondsky/claude-skills) into .claude/skills/react-hook-form-zod in your project. Claude Code loads it when a task matches its description.

How do I install React Hook Form Zod in Codex?

Run `npx skills add secondsky/claude-skills --skill react-hook-form-zod -a codex`. Or copy the skill folder (plugins/react-hook-form-zod/skills/react-hook-form-zod in secondsky/claude-skills) into .agents/skills/react-hook-form-zod in your project. Codex loads it when a task matches its description.

Can I use React Hook Form Zod in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add secondsky/claude-skills --skill react-hook-form-zod -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/react-hook-form-zod, .gemini/skills/react-hook-form-zod, .github/skills/react-hook-form-zod and .opencode/skills/react-hook-form-zod in your project.

What does React Hook Form Zod need to run?

Going by SKILL.md and its folder, React Hook Form Zod needs a shell for the scripts in its folder and the command-line tools its instructions call (bun). Our summary lists: A Bash shell.

Does React Hook Form Zod access the network?

SKILL.md names 4 domains. As links in the text: github.com, react-hook-form.com, zod.dev and ui.shadcn.com. This is read from the text; nothing was executed.

Is React Hook Form Zod safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does React Hook Form Zod use?

React Hook Form Zod is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does React Hook Form Zod use?

About 4.8k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 14k tokens, read only when the agent opens those files.

What are the alternatives to React Hook Form Zod?

Skills that share tags, products or a category with React Hook Form Zod: Buzzform (buildnbuzz/buzzform, 101 stars), Opik Frontend Patterns (comet-ml/opik, 22k stars), Frontend Patterns Template (bybren-llc/safe-agentic-workflow, 421 stars) and Typescript Patterns (softspark/ai-toolkit, 179 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains React Hook Form Zod?

secondsky (a GitHub user) maintains it in secondsky/claude-skills, which has 227 GitHub stars. The repository holds 169 skills in this directory. The repository was last updated on September 28, 2026.

Source: secondsky/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.