Design Philosophy
This document describes claudelint's validation philosophy, scope boundaries, and design principles.
Overview
claudelint is designed as a dual-purpose tool:
- NPM Package - Standalone CLI and library for validation
- Claude Code Plugin - Interactive skills and hooks for Claude Code
Both interfaces share the same validation logic through a common core.
Validation Philosophy
claudelint follows the separation of concerns pattern established by successful linter ecosystems (ESLint + Prettier, markdownlint + Vale).
Complementary Tools, Not Comprehensive
claudelint is not a comprehensive linting solution. Instead, it:
- Does one thing well - Validates Claude-specific configurations
- Works alongside existing tools - Complements markdownlint, prettier, etc.
- Avoids duplication - Delegates generic validation to specialized tools
Scope: Claude-Specific Validation Only
In Scope:
- Claude context constraints (file size limits, import depth)
- Claude-specific syntax (
@importstatements) - Claude configuration schemas (skills frontmatter, settings, hooks)
- Claude ecosystem validation (MCP servers, plugins)
- Cross-reference integrity (files referenced actually exist)
Out of Scope (delegate to existing tools):
- Generic markdown formatting (MD041, MD031, etc.) - Use markdownlint
- Code formatting and whitespace - Use prettier
- Spelling and grammar - Use Vale or similar
- JSON/YAML syntax errors - Handled by parsers, not validated separately
Design Principles
- Domain Expertise - Focus on deep Claude knowledge, not generic rules
- No Conflicts - Never overlap with existing tool responsibilities
- User Control - Users configure complementary tools independently
- Performance - Stay lightweight by avoiding redundant validation
- Ecosystem Integration - Provide clear guidance on multi-tool setups
Project-Scoped by Design
claudelint validates project-level and plugin-level files only. Global user configurations are explicitly out of scope.
What's Covered
claudelint covers all project-level files (.claude/, .mcp.json, CLAUDE.md) and plugin-level files (agents/, skills/, plugin.json). See File Discovery for the complete file type reference.
Not covered: Global user configurations (~/.claude/) and runtime flags (--agents) are out of scope.
Rationale
Project-scoped linting aligns with:
- CI/CD integration - claudelint runs in pipelines where only project files exist
- Version control - Project files are committed to git; global configs are personal preferences
- Config as code - Project config should be validated like any other committed artifact
- Reproducibility - Every developer working on the project sees the same validation results