Token导航 LogoToken导航

Agent Skill · 研究检索

web-forms-zod-validation(Web 表单 Zod 验证)

web-forms-zod-validation 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

web-forms-zod-validation 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为接触敏感数据;许可证信息还不明确,第三方扫描已通过,按安装量在研究检索类的 73,675 个 Skill 里排第 63,891。

总安装 309周安装 13GitHub Stars 5下载 108核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:web-forms-zod-validation(Web 表单 Zod 验证)
来源仓库:https://github.com/agents-inc/skills
仓库路径:skills/web-forms-zod-validation
安装命令:
npx skills add https://github.com/agents-inc/skills --skill web-forms-zod-validation
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/agents-inc/skills --skill web-forms-zod-validation

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

用于查找、检索和筛选 Web 表单验证相关信息,辅助开发决策。适合根据关键词或任务场景快速定位 Zod 验证相关的最佳实践和方案。通过 GitHub 仓库安装,支持 Codex、Claude、Cursor、Gemini CLI 等宿主。使用前应核实仓库维护状态和权限范围,避免依赖过期或不完整文档。

web-forms-zod-validation 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/web-forms-zod-validation

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/agents-inc/skills --skill web-forms-zod-valida…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

web-forms-zod-validation 怎么安装?

在终端执行 npx skills add https://github.com/agents-inc/skills --skill web-forms-zod-validation。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

web-forms-zod-validation 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

web-forms-zod-validation 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

web-forms-zod-validation 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

web-forms-zod-validation 用的人多吗?

公开数据是累计安装 309 次,近一周安装 13 次,下载 108 次,GitHub 5 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

web-forms-zod-validation 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
web-forms-zod-validation

Web 表单 Zod 验证 · 本页

3095接触敏感数据未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Zod Schema Validation Patterns

Quick Guide: Use Zod for runtime validation at trust boundaries (API responses, form inputs, config, URL params). Define schemas once, derive types with z.infer. Use safeParse for error handling, refine/superRefine for custom validation, transform for data conversion. Named constants for all validation limits. Version Note: Zod v4 is now the stable release (v4.1+). It brings 14.7x faster string parsing, 57% smaller bundle, and new top-level APIs (z.email(), z.url(), z.iso.*). The v3 method-chain equivalents (z.string().email()) still work but are deprecated. For migration details, see reference.md.

<critical_requirements>

CRITICAL: Before Using This Skill

All code must follow project conventions in CLAUDE.md (kebab-case, named exports, import ordering, import type, named constants)

(You MUST use safeParse instead of parse for user-facing validation - prevents unhandled exceptions)

(You MUST use z.infer<typeof schema> to derive types - never duplicate schema as separate interface)

(You MUST validate at trust boundaries - API responses, form inputs, config files, URL params)

(You MUST use named constants for validation limits - NO magic numbers in .min(), .max(), .length())

</critical_requirements>


Auto-detection: Zod schemas, z.object, z.string, z.number, z.infer, safeParse, refine, superRefine, transform, discriminatedUnion, z.coerce, z.pipe, z.catch, z.brand, z.lazy, z.email, z.url, z.iso

When to use:

  • Validating API responses before using data
  • Parsing form input data with type safety
  • Validating configuration files or environment variables
  • Defining contracts between systems (frontend/backend shared schemas)
  • Runtime type checking for data from untrusted sources

When NOT to use:

  • Internal function parameters (TypeScript is sufficient for trusted data)
  • Simple boolean checks that don't need schema definition
  • Performance-critical hot paths where validation overhead matters

Philosophy

TypeScript provides compile-time type safety for code you control. Zod provides runtime validation for data you don't control - API responses, user input, configuration files, URL parameters. Use TypeScript for internal contracts; use Zod at trust boundaries where external data enters your system.

Key principle: Define the schema once, derive the type. Never maintain parallel type definitions and validation logic - they will drift apart.

// Schema is the source of truth
const UserSchema = z.object({
  name: z.string(),
  email: z.string().email(),
});

// Type is derived, always in sync
type User = z.infer<typeof UserSchema>;

Core Patterns

Pattern 1: Schema Definition with Named Constants

Define schemas with named constants for all validation limits. Custom error messages for user-facing fields.

const MIN_USERNAME_LENGTH = 3;
const MAX_USERNAME_LENGTH = 50;

const UserSchema = z.object({
  username: z
    .string()
    .min(
      MIN_USERNAME_LENGTH,
      `Username must be at least ${MIN_USERNAME_LENGTH} characters`,
    )
    .max(
      MAX_USERNAME_LENGTH,
      `Username cannot exceed ${MAX_USERNAME_LENGTH} characters`,
    ),
  email: z.string().email("Invalid email format"),
});

type User = z.infer<typeof UserSchema>; // Always derived, never manual interface

Why good: named constants make limits discoverable, custom error messages improve UX, type derived from schema

See examples/core.md for complete schema examples with reusable sub-schemas and CRUD composition patterns.


Pattern 2: Safe Parsing for Error Handling

Use safeParse for user input and API responses. Reserve parse for config/internal data where invalid = programming error.

const result = UserSchema.safeParse(data);

if (!result.success) {
  const errors = result.error.issues.reduce(
    (acc, err) => {
      const field = err.path.join(".");
      acc[field] = err.message;
      return acc;
    },
    {} as Record<string, string>,
  );
  return { success: false, errors };
}

return { success: true, user: result.data };

Why good: safeParse never throws, validation errors handled explicitly, error formatting provides useful field-level feedback

See examples/core.md for form validation and API response validation patterns.


Pattern 3: Refinements and Cross-Field Validation

Use refine for custom validation logic. Use superRefine when you need cross-field validation with specific error paths.

const MIN_PASSWORD_LENGTH = 8;

const PasswordFormSchema = z
  .object({
    password: z.string().min(MIN_PASSWORD_LENGTH),
    confirmPassword: z.string(),
  })
  .superRefine((data, ctx) => {
    if (data.password !== data.confirmPassword) {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        message: "Passwords do not match",
        path: ["confirmPassword"],
      });
    }
  });

Why good: superRefine enables cross-field validation with specific error paths, keeps all validation in the schema

See examples/core.md for password refinement chains and conditional validation patterns.


Pattern 4: Transforms and Type Conversion

Use transform to convert data during validation. Use z.input and z.output when transforms change the type.

const DateSchema = z
  .string()
  .datetime()
  .transform((str) => new Date(str));

type DateInput = z.input<typeof DateSchema>; // string
type DateOutput = z.output<typeof DateSchema>; // Date

Gotcha: z.infer returns the output type. When a function accepts pre-validation input, use z.input for the parameter type.

See examples/transforms.md for coercion patterns (URL params, form data) and transform pipelines.


Pattern 5: Discriminated Unions

Use discriminatedUnion when objects share a common discriminator field. Provides better error messages and TypeScript narrowing than union.

const NotificationSchema = z.discriminatedUnion("type", [
  z.object({
    type: z.literal("email"),
    email: z.string().email(),
    subject: z.string(),
  }),
  z.object({ type: z.literal("sms"), phone: z.string(), message: z.string() }),
  z.object({
    type: z.literal("push"),
    deviceId: z.string(),
    title: z.string(),
  }),
]);

Why good over z.union: discriminatedUnion reports which variant failed (not "Invalid input"), TypeScript narrows type in switch statements

See examples/core.md for payment method union and type narrowing examples.


Pattern 6: Schema Composition

Compose schemas using extend, pick, omit, and partial for CRUD operations.

const BaseEntitySchema = z.object({
  id: z.string().uuid(),
  createdAt: z.string().datetime(),
  updatedAt: z.string().datetime(),
});

const UserSchema = BaseEntitySchema.extend({
  email: z.string().email(),
  name: z.string(),
});
const CreateUserSchema = UserSchema.omit({
  id: true,
  createdAt: true,
  updatedAt: true,
});
const UpdateUserSchema = CreateUserSchema.partial();
const UserSummarySchema = UserSchema.pick({ id: true, name: true });

See examples/core.md for full CRUD schema composition example.


Pattern 7: Coercion for String Inputs

Use z.coerce for URL params and form data that arrive as strings. Simpler than manual parsing.

const DEFAULT_PAGE = 1;
const DEFAULT_LIMIT = 20;
const MAX_LIMIT = 100;

const PaginationSchema = z.object({
  page: z.coerce.number().int().positive().default(DEFAULT_PAGE),
  limit: z.coerce
    .number()
    .int()
    .positive()
    .max(MAX_LIMIT)
    .default(DEFAULT_LIMIT),
});

// "3" -> 3, "50" -> 50, missing -> defaults

Gotcha: z.coerce.boolean() coerces any truthy value to true, including the string "false". Use explicit comparison for string booleans.

See examples/transforms.md for complete pagination and query param patterns.


Pattern 8: Optional, Nullable, and Nullish

const ProfileSchema = z.object({
  name: z.string(), // Required
  bio: z.string().optional(), // string | undefined
  avatar: z.string().url().nullable(), // string | null
  nickname: z.string().nullish(), // string | null | undefined
  theme: z.string().default("light"), // string (always defined)
});

Key distinction: nullable = explicitly set to null (API returns null), optional = may be omitted entirely, nullish = either.


Detailed Resources:


<red_flags>

RED FLAGS

High Priority Issues:

  • Using parse for user-facing validation - Throws exceptions for expected invalid input, requiring try-catch and losing detailed error info
  • Magic numbers in validation limits - .min(3).max(50) is undocumented; use named constants like MIN_USERNAME_LENGTH
  • Defining separate TypeScript interfaces - Creates drift between schema and type; always use z.infer<typeof schema>
  • Not validating at trust boundaries - API responses, user input, and config should always be validated at entry points
  • Async refinements with parse instead of parseAsync - Async refinements silently fail with sync parse methods

Medium Priority Issues:

  • Overly strict validation on optional fields - Empty strings should often be treated as undefined for optional fields
  • Missing custom error messages - Default "Invalid input" messages are not user-friendly
  • Validating internal function parameters with Zod - TypeScript is sufficient for trusted internal code
  • Using .passthrough() by default - Allows unexpected fields through; use .strict() when you want to reject extras

Gotchas & Edge Cases:

  • z.coerce.boolean(): Coerces any truthy value to true, including string "false" - use explicit string comparison if needed
  • Transform order: .transform() runs after all other validations; refinements on transformed values need .pipe() to validate after
  • Empty strings: z.string().email() rejects empty strings; use .email().or(z.literal("")) to allow empty
  • Extend with refinements: .extend() on a schema with .refine() throws; apply refinements after extending instead
  • Date parsing: z.coerce.date() uses new Date() which accepts many formats; use .datetime() for strict ISO format
  • z.union vs z.discriminatedUnion: Union tries all schemas and reports combined errors; discriminatedUnion uses discriminator for targeted validation and better errors
  • v4: .refine() function second arg removed: z.string().refine(fn, (val) => ({message:...})) no longer works; use superRefine() for dynamic messages
  • v4: ctx.path removed in .superRefine(): No longer available for performance reasons; ctx.addIssue() still works
  • v4 deprecations: .flatten() deprecated - use z.flattenError() instead; .format() deprecated - use z.treeifyError() instead; .merge() deprecated - use .extend() instead

</red_flags>


<critical_reminders>

CRITICAL REMINDERS

All code must follow project conventions in CLAUDE.md

(You MUST use safeParse instead of parse for user-facing validation - prevents unhandled exceptions)

(You MUST use z.infer<typeof schema> to derive types - never duplicate schema as separate interface)

(You MUST validate at trust boundaries - API responses, form inputs, config files, URL params)

(You MUST use named constants for validation limits - NO magic numbers in .min(), .max(), .length())

Failure to follow these rules will create type mismatches, unhandled exceptions, and unmaintainable validation code.

</critical_reminders>

平台分布

Codex

36.14%
按下载量换算39

Claude

27.69%
按下载量换算30

Cursor

17.47%
按下载量换算19

Gemini CLI

9.16%
按下载量换算10

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills