home / skills / busirocket / agents-skills / busirocket-validation
This skill enforces consistent input and API data validation using Zod schemas and guard helpers, ensuring safe boundary checks.
npx playbooks add skill busirocket/agents-skills --skill busirocket-validationReview the files below or copy the command above to add this skill to your agents.
---
name: busirocket-validation
description:
Validation strategy using Zod for schemas and guard helpers for runtime
checks. Use when validating API responses, request inputs, or external data at
boundaries.
metadata:
author: cristiandeluxe
version: "1.0.0"
---
# Validation (Zod + Guards)
Consistent validation at boundaries: Zod for complex schemas, small guards for
simple runtime checks.
## When to Use
Use this skill when:
- Validating API responses or external data in services
- Validating request/input shapes at boundaries (e.g. route handlers, SDK)
- Adding or refactoring `utils/validation/` helpers
- Defining Zod schemas alongside types in `types/<area>/`
## Non-Negotiables (MUST)
- **Services**: validate API/external data with Zod schemas (e.g.
`.safeParse()`).
- **Utils**: keep small coercion/guard helpers under `utils/validation/` (one
function per file).
- **Types**: Zod schemas can live in `types/<area>/`; infer types with
`z.infer<typeof Schema>`.
- Prefer `unknown` inputs at boundaries + explicit narrowing.
- No inline validation logic inside components/hooks.
## Rules
### Boundaries & Placement
- `validation-boundaries` - Where validation lives (services, utils, types)
### Zod Schemas (Complex Validation)
- `validation-zod-schemas` - Using Zod for complex validation with
`.safeParse()`
- `validation-zod-types` - Inferring types from Zod schemas with `z.infer`
### Guard Helpers (Simple Runtime Checks)
- `validation-guard-helpers` - Creating simple guard functions with type
predicates
- `validation-guard-examples` - Recommended guard helpers (isRecord,
isNonEmptyString, etc.)
### Anti-Patterns
- `validation-no-inline` - No inline validation logic in components/hooks
## Related Skills
- `busirocket-nextjs` - Validation in route handlers
- `busirocket-core-conventions` - File boundaries and structure
## How to Use
Read individual rule files for detailed explanations and code examples:
```
rules/validation-boundaries.md
rules/validation-zod-schemas.md
rules/validation-guard-helpers.md
```
Each rule file contains:
- Brief explanation of why it matters
- Code examples (correct and incorrect patterns)
- Additional context and best practices
This skill defines a validation strategy using Zod schemas for complex shapes and small guard helpers for simple runtime checks. It enforces validation at service and utility boundaries, encourages inferring types from schemas, and avoids inline validation inside UI components or hooks. The goal is consistent, safe handling of external and boundary data.
Use Zod schemas to describe and validate complex API responses and request payloads, calling .safeParse() at service boundaries to ensure runtime safety. Keep lightweight guard functions (type predicates) for trivial checks like non-empty strings or plain objects, each implemented as a single utility function. Prefer accepting unknown at boundaries and explicitly narrow types after validation, with Zod schemas living alongside inferred TypeScript types.
When should I use a guard helper vs Zod?
Use guard helpers for trivial checks (non-empty string, plain object) to keep runtime overhead minimal. Use Zod for structured, nested, or validated coercions and when you need detailed error reporting.
Where do I place schemas and guards?
Place complex Zod schemas in types/<area>/ alongside inferred types. Put small guard helpers in utils/validation/, one function per file for clarity and discoverability.