agentsclimarketplace

Validate

Skill wep4you/wep4you-agent-skills/skills/validate

Scans and auto-fixes Obsidian vault markdown files against frontmatter standards defined in settings.yaml via the obsidian:validate command and validator scripts. Use this skill to validate notes for missing required properties (type, up, created, daily, tags), fix unquoted wikilinks or incorrect date formats, check note-type compliance per folder, run bulk validation with --fix or --dry-run, generate JSONL audit logs, do periodic vault maintenance, or validate specific folders or files. Always consult for obsidian:validate commands, vault auditing, frontmatter fixing, bulk note scanning, or compliance checking. This skill validates and fixes actual note contents — not config/settings files (use config), not note type definitions (use note-types), not templates (use templates), not property schema definitions (use frontmatter).From its SKILL.md

Install
npx -y skills add wep4you/wep4you-agent-skills --skill validate

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

7.1 KB, as published. Nobody here has run it

Obsidian Validator

Validates Obsidian vault notes against configurable standards and auto-fixes common issues.

Quick Start (v1.0.0)

# Report mode (default)
uv run validate_command.py --vault /path/to/vault

# Auto-fix mode (replaces --mode auto)
uv run validate_command.py --vault /path/to/vault --fix

# Filter by note type
uv run validate_command.py --vault /path/to/vault --type project --fix

# Disable JSONL audit logging
uv run validate_command.py --vault /path/to/vault --no-jsonl

CRITICAL: Claude Code Behavior

NEVER output commands for the user to copy. When issues are found:

  1. Show brief summary of issues
  2. Ask: "Should I fix these issues automatically?" OR fix automatically
  3. Run --fix yourself
  4. Report results

❌ WRONG: "To fix, run: uv run validate_command.py --vault . --fix" ✅ RIGHT: "Fixing issues..." [runs auto-fix] "✅ Fixed 2 issues."

Validation Checks

The validator performs these checks:

CheckDescriptionAuto-Fix
Empty Typestype: property exists but is emptyYes - infers from folder
Missing PropertiesRequired frontmatter properties missingYes - adds type:
Invalid Daily LinksFull-path daily links instead of basenameYes
Unquoted Wikilinks[[link]] in YAML without quotesYes
Invalid Createdcreated: as wikilink instead of dateYes
Title PropertiesRedundant title: in frontmatterYes - removes
Date Mismatchescreated: and daily: dates don't matchYes - syncs
Type Property ViolationsType-specific required properties missing (v1.3.0)No
Type Format ViolationsType-specific property format errors (v1.3.0)No

Required Frontmatter Properties

Per vault standards, notes must have 6 properties:

type: dot           # Note type (dot, map, source, project, etc.)
up: "[[Parent]]"    # Parent note link (quoted)
created: 2025-01-15 # Creation date (YYYY-MM-DD)
daily: "[[2025-01-15]]"  # Daily note link (basename, quoted)
collection:         # Collection classification (can be empty)
related:            # Related notes (can be empty)

Configuration

Default Config Location

The validator looks for config at: .claude/config/validator.yaml

Key Configuration Options

version: 1.3.0
dynamic_config: true          # Enable dynamic config loading (v1.3.0)
note_type_validation: true    # Enable type-specific validation (v1.3.0)

# Paths to exclude from validation
exclude_paths:
  - +/                    # Inbox
  - x/                    # System files
  - .obsidian/
  - .claude/

# Files to exclude
exclude_files:
  - Home.md
  - README.md

# Type inference rules (folder → type mapping)
type_rules:
  'Atlas/Maps/': map
  'Atlas/Dots/': dot
  'Atlas/Sources/': source
  'Efforts/Projects/': project
  'Calendar/daily/': daily

# Note-type specific validation rules (v1.3.0)
note_type_validation_rules:
  map:
    required: [type, up]           # Required properties for maps
    optional: [related, tags]      # Optional properties
    formats:
      created: date                # created must be YYYY-MM-DD
      up: wikilink                 # up must be [[link]]
  project:
    required: [type, status]
    optional: [due, priority]
    formats:
      status: string
      due: date

# Auto-fix toggles
auto_fix:
  empty_types: true
  daily_links: true
  wikilink_quotes: true
  title_properties: true

See config/default.yaml for complete configuration options.

Modes

  • report (default): Show issues without making changes
  • auto: Fix issues automatically, re-validate after fixes
  • interactive: Prompt before each fix (future)

JSONL Audit Logging (v1.5.0)

Audit logging is enabled by default. Validation results are automatically logged to .claude/logs/validate.jsonl.

# Default: logs to .claude/logs/validate.jsonl
uv run scripts/validator.py --vault .

# Custom log path
uv run scripts/validator.py --vault . --jsonl my-audit.jsonl

# Disable logging
uv run scripts/validator.py --vault . --no-jsonl

Each line in the JSONL file is a complete JSON object:

{
  "timestamp": "2025-12-27T10:30:00.123456",
  "vault_path": "/path/to/vault",
  "mode": "report",
  "methodology": "para",
  "total_issues": 5,
  "issues_by_type": {"empty_types": 2, "missing_properties": 3},
  "issues_detail": {"empty_types": ["file1.md", "file2.md"]},
  "fixes_applied": 0
}

The JSONL file is appended to, allowing you to track validation history over time. The .claude/logs/ directory is created automatically if it doesn't exist.

Exit Codes

  • 0: No issues found (or all fixed in auto mode)
  • 1: Issues found (or remaining after auto-fix)

Integration with Claude Code

When user requests vault validation:

  1. Run validator in report mode first
  2. If issues are found:
    • Show summary to user
    • Ask if they want to auto-fix OR immediately run auto-fix mode
    • DO NOT output the command - just run it directly
  3. After auto-fix, report results

Important: When issues are found, Claude should proactively offer to fix them or run auto-fix directly. Never just output a command for the user to copy - always execute it.

Example Flow

User: validate my vault

Claude: [runs validator in report mode]
Claude: Found 2 issues. Fixing automatically...
Claude: [runs validator in auto mode]
Claude: ✅ Fixed 2 issues. Vault is now compliant.

Remaining Issues After Auto-Fix

Some issues cannot be auto-fixed and require manual intervention:

IssueWhy No Auto-FixSuggested Action
Type Property ViolationsType-specific rules varyReview and update manually
Type Format ViolationsAmbiguous correctionCheck property format docs
Unknown note typesCannot infer correct typeAssign type manually

When --fix leaves remaining issues, report them to the user with specific file paths and suggested corrections.

Interactive Mode

Terminal

In terminal mode, the interactive wizard guides you through validation options.

Claude Code / Non-Interactive

When called without a terminal (e.g., in Claude Code), JSON is returned:

{
  "interactive_required": true,
  "action": "fix",
  "config_schema": {...}
}

Use --config='...' or --yes to pass values directly.

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.