format-cc
Formats Claude Code files with markdownlint, prettier, and shellcheck. Use when user asks to "format my files", "fix markdown…
Validates CLAUDE.md files for size, imports, and structure. Use when user asks to "check my CLAUDE.md", "why is my CLAUDE.md too long", "validate imports", or "fix CLAUDE.md errors". Checks file size limits (30KB warning, 50KB error), @import directives, frontmatter in
Claude Code
$ npx -y skills add pdugan20/claudelint --skill validate-cc-md --agent claude-code
Codex
$ npx skills add pdugan20/claudelint --skill validate-cc-md -a codex -y
Cursor
$ npx skills add pdugan20/claudelint --skill validate-cc-md -a cursor -y
Gemini CLI
$ npx skills add pdugan20/claudelint --skill validate-cc-md -a gemini-cli -y
GitHub Copilot
$ npx skills add pdugan20/claudelint --skill validate-cc-md -a github-copilot -y
OpenCode
$ npx skills add pdugan20/claudelint --skill validate-cc-md -a opencode -y
Windsurf
$ npx skills add pdugan20/claudelint --skill validate-cc-md -a windsurf -y
name: validate-cc-md description: Validates CLAUDE.md files for size, imports, and structure. Use when user asks to "check my CLAUDE.md", "why is my CLAUDE.md too long", "validate imports", or "fix CLAUDE.md errors". Checks file size limits (30KB warning, 50KB error), @import directives, frontmatter in .claude/rules/, and section organization. version: 1.0.0 argument-hint: "[flags]" allowed-tools: - Bash(claudelint:*)
Runs `claudelint validate-claude-md` to validate CLAUDE.md files including:
claudelint validate-claude-md $ARGUMENTS
**User says**: "Claude keeps saying my instructions are too long and won't load them" **What happens**:
1. Skill runs `claudelint validate-claude-md` 2. Shows CLAUDE.md is 52KB (exceeds 50KB hard limit) 3. Identifies 3 largest sections: API docs (18KB), Git workflow (12KB), Testing guide (8KB) 4. Shows how to split: create .claude/rules/api.md and add `@import .claude/rules/api.md`
**Result**: User splits sections, CLAUDE.md now 28KB, Claude loads it successfully
**User says**: "I added @import .claude/rules/testing.md but Claude says the file doesn't exist" **What happens**:
1. Skill validates @import path 2. Finds file is at `.claude/rules/tests.md` not `testing.md` (typo) 3. Also checks .claude/rules/tests.md exists and has valid frontmatter 4. Shows corrected import line
**Result**: User fixes filename typo, import loads correctly
**User says**: "My .claude/rules/backend.md isn't applying when I edit backend files" **What happens**:
1. Skill checks frontmatter in .claude/rules/backend.md 2. Finds `paths: "backend/*"` (string) should be `paths: ["backend/**/*"]` (array with glob) 3. Explains paths field requires array of glob patterns 4. Shows corrected frontmatter
**Result**: Rules now apply to backend directory correctly
Validate all CLAUDE.md files:
claudelint validate-claude-md
Validate specific file:
claudelint validate-claude-md --path /path/to/CLAUDE.md
Verbose output with explanations:
claudelint validate-claude-md --verbose --explain
Rules can be configured in `.claudelintrc.json`:
{
"rules": {
"claude-md-size": "warn",
"claude-md-import-missing": "error",
"claude-md-import-circular": "error"
}
}Disable specific rules inline:
<!-- claudelint-disable size-warning --> Large file content here... <!-- claudelint-enable size-warning -->
Or disable for a single line:
<!-- claudelint-disable-next-line import-missing --> @import non-existent-file.md
**Cause**: CLAUDE.md file is too large for Claude's context window **Solution**: Split content into .claude/rules/ files using @import directives **Example**: Move testing guidelines to .claude/rules/testing.md and add `@import .claude/rules/testing.md` to CLAUDE.md
**Cause**: @import directive points to a file that doesn't exist **Solution**: Check the path is correct relative to CLAUDE.md **Common mistakes:**
**Cause**: File A imports B which imports A (infinite loop) **Solution**: Reorganize imports to be one-directional **Example**: CLAUDE.md should import .claude/rules/ files, but those files should not import CLAUDE.md back
**Cause**: File is approaching the safe limit for Claude's context **Solution**: Not urgent, but consider splitting large sections into @imports **Why 30KB?** Claude can handle up to ~50KB, but staying under 30KB leaves room for growth and keeps context manageable
A linter for Claude Code projects. Validates CLAUDE.md files, skills, settings, hooks, MCP servers, plugins, and more.
Formats Claude Code files with markdownlint, prettier, and shellcheck. Use when user asks to "format my files", "fix markdown…
Interactively helps users optimize their CLAUDE.md files. Use when user asks to "optimize my CLAUDE.md", "my CLAUDE.md is too…
Runs comprehensive claudelint validation on all Claude Code project files. Use when user asks to "check everything", "run all…
Validates Claude Code hooks.json files for schema, events, and commands. Use when user asks to "check my hooks", "validate…
Validates MCP server configuration files (.mcp.json). Use when user asks to "check my .mcp.json", "why isn't my MCP working",…
Validates Claude Code plugin manifest files (plugin.json). Use when user asks to "check my plugin.json", "validate plugin.json",…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.