data-validation

data-validation is a skill for Claude Code from saajunaid/caddis-plugin. It costs 35 tokens per session (1,770 once invoked), scanned A, original, MIT.

Patterns for checking whether data has the right shape, types, and values as it moves through ETL pipelines, APIs, or processing jobs.

In plain words
What is it for?
Use it to define validation rules, check data quality, validate API inputs, and enforce database-level constraints.
Why use it?
Invalid or inconsistent data can enter a system unnoticed and cause later errors or unreliable results.

Skill for Claude Code

Written for Claude Code: context: fork in frontmatter.

Good fit Use it to define validation rules, check data quality, validate API inputs, and enforce database-level constraints.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/saajunaid/caddis-plugin/data-validation
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add saajunaid/caddis-plugin --skill data-validation
Clone the repo
git clone --depth 1 https://github.com/saajunaid/caddis-plugin

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for data-validation

README.md
[![agentmods](https://agentmods.dev/badge/skills/saajunaid/caddis-plugin/data-validation/github.svg)](https://agentmods.dev/skills/saajunaid/caddis-plugin/data-validation)
Your own site
<a href="https://agentmods.dev/skills/saajunaid/caddis-plugin/data-validation"><img src="https://agentmods.dev/badge/skills/saajunaid/caddis-plugin/data-validation/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for data-validation

Your own site · 80×15
<a href="https://agentmods.dev/skills/saajunaid/caddis-plugin/data-validation"><img src="https://agentmods.dev/badge/skills/saajunaid/caddis-plugin/data-validation.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 35 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,770 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00035 $0.01770
Opus 5.5 $0.00014 $0.00708
Sonnet 5.5 $0.00007 $0.00354
Haiku 4.5 $0.00003 $0.00177

Measured 29d ago against content hash 23ede9971335, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

data-validation scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 29d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.github/skills/data/data-validation/SKILL.md · 221 lines

How it starts

The opening of the file, as written. The whole thing — 221 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Data Validation Skill

Bad data in → bad decisions out. Validate at every boundary: ingestion, transformation, and output.

1. When to Apply This Skill

Trigger conditions:

  • Building or reviewing ETL/ELT pipelines
  • "How do we validate incoming data?"
  • Designing data contracts between services
  • Data quality issues in production
  • Schema migration or new data source integration

2. Validation Layers

Validate at three boundaries — not just one.

Source → [Ingestion Validation] → Raw Layer
Raw    → [Transform Validation] → Clean Layer
Clean  → [Output Validation]    → Consumer / API / Report
Layer What to Check Fail Strategy
Ingestion Schema, types, required fields, file format Reject row or file, log to dead-letter
Transform Business rules, referential integrity, ranges Flag row, route to review queue
Output Final shape matches consumer contract Block publish, alert team

3. Pydantic Validation (Python)

Schema Definition

from pydantic import BaseModel, Field, field_validator, model_validator
from datetime import date
from enum import Enum

class Priority(str, Enum):
    LOW = "low"
    MEDIUM = "medium"
    HIGH = "high"
    CRITICAL = "critical"

class ComplaintRecord(BaseModel):
    complaint_id: str = Field(..., min_length=1, max_length=50)
    customer_id: str = Field(..., pattern=r"^CUST-\d{6}$")
    category: str = Field(..., min_length=1)
    priority: Priority
    description: str = Field(..., min_length=10, max_length=5000)
    created_date: date
    resolved_date: date | None = None
    amount: float = Field(default=0, ge=0, le=1_000_000)

    @field_validator("resolved_date")
    @classmethod
    def resolved_after_created(cls, v, info):
        if v and info.data.get("created_date") and v < info.data["created_date"]:
            raise ValueError("Resolved date cannot be before created date")
        return v

    @model_validator(mode="after")
    def critical_must_have_description(self):
        if self.priority == Priority.CRITICAL and len(self.description) < 50:
            raise ValueError("Critical complaints require detailed description (50+ chars)")
        return self

Read the full file on GitHub · 221 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 29d ago Changed · -19 tokens per session 23ede9971335
  2. 1mo ago First seen · 221 lines · 54 tokens per session scan A ca620bd220d7

Subscribe to this mod's changes

data-validation is a skill published in the GitHub repository saajunaid/caddis-plugin (0 stars, last pushed 2d ago), licensed MIT. It adds 35 tokens to every session and 1,770 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.