[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CHYFPSAYGSCGVVEBT9PDYW":3,"skill-same:01M6CHYFPSAYGSCGVVEBT9PDYW":77},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6CHYFPSAYGSCGVVEBT9PDYW","validate-cc-md",null,"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\u002Frules\u002F, and section organization.","pdugan20\u002Fclaudelint","pdugan20","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1837100?v=4","01M6CHXZYG5NW9VHCYCCVFY54W","Patrick Dugan","01M6CHY02TC6DRKYRK9H3W9C96",14,"MIT","https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint\u002Fblob\u002Fmain\u002Fskills\u002Fvalidate-cc-md\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31],"validate","cc","validate cc md","file","why","Bash","Rules","check","user","fix","use","files","flags","2026-11-10 10:12:30",false,"---\nname: validate-cc-md\ndescription: 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\u002Frules\u002F, and section organization.\nversion: 1.0.0\nargument-hint: \"[flags]\"\nallowed-tools:\n  - Bash(claudelint:*)\n---\n\n# Validate CLAUDE.md Files\n\nRuns `claudelint validate-claude-md` to validate CLAUDE.md files including:\n\n- File size limits (30KB warning, 50KB error)\n- @import directive validation\n- Frontmatter validation in .claude\u002Frules\u002F files\n- Section organization\n\n## Usage\n\n```bash\nclaudelint validate-claude-md $ARGUMENTS\n```\n\n## Options\n\n- `--path \u003Cpath>` - Validate specific CLAUDE.md file\n- `--verbose` - Show detailed output\n- `--warnings-as-errors` - Treat warnings as errors\n- `--explain` - Show detailed explanations and fix suggestions\n\n## Examples\n\n### Example 1: Claude says context is too large\n\n**User says**: \"Claude keeps saying my instructions are too long and won't load them\"\n**What happens**:\n\n1. Skill runs `claudelint validate-claude-md`\n2. Shows CLAUDE.md is 52KB (exceeds 50KB hard limit)\n3. Identifies 3 largest sections: API docs (18KB), Git workflow (12KB), Testing guide (8KB)\n4. Shows how to split: create .claude\u002Frules\u002Fapi.md and add `@import .claude\u002Frules\u002Fapi.md`\n\n**Result**: User splits sections, CLAUDE.md now 28KB, Claude loads it successfully\n\n### Example 2: Import shows \"file not found\" in Claude\n\n**User says**: \"I added @import .claude\u002Frules\u002Ftesting.md but Claude says the file doesn't exist\"\n**What happens**:\n\n1. Skill validates @import path\n2. Finds file is at `.claude\u002Frules\u002Ftests.md` not `testing.md` (typo)\n3. Also checks .claude\u002Frules\u002Ftests.md exists and has valid frontmatter\n4. Shows corrected import line\n\n**Result**: User fixes filename typo, import loads correctly\n\n### Example 3: Rules file won't apply to specific paths\n\n**User says**: \"My .claude\u002Frules\u002Fbackend.md isn't applying when I edit backend files\"\n**What happens**:\n\n1. Skill checks frontmatter in .claude\u002Frules\u002Fbackend.md\n2. Finds `paths: \"backend\u002F*\"` (string) should be `paths: [\"backend\u002F**\u002F*\"]` (array with glob)\n3. Explains paths field requires array of glob patterns\n4. Shows corrected frontmatter\n\n**Result**: Rules now apply to backend directory correctly\n\n### Command Examples\n\nValidate all CLAUDE.md files:\n\n```bash\nclaudelint validate-claude-md\n```\n\nValidate specific file:\n\n```bash\nclaudelint validate-claude-md --path \u002Fpath\u002Fto\u002FCLAUDE.md\n```\n\nVerbose output with explanations:\n\n```bash\nclaudelint validate-claude-md --verbose --explain\n```\n\n## What Gets Validated\n\n### File Size\n\n- Warns if file exceeds 30KB (approaching context limit)\n- Errors if file exceeds 50KB (exceeds safe context limit)\n- Suggests splitting into .claude\u002Frules\u002F for large files\n\n### Import Validation\n\n- Checks that @import directives point to existing files\n- Detects circular import dependencies\n- Validates import depth limits\n\n### Frontmatter (for .claude\u002Frules\u002F files)\n\n- Validates YAML frontmatter syntax\n- Checks `paths` field is string or array\n- Ensures frontmatter is properly closed\n\n### Content Organization\n\n- Warns if CLAUDE.md has >20 sections\n- Suggests moving content to .claude\u002Frules\u002F for better organization\n\n## Configuration\n\nRules can be configured in `.claudelintrc.json`:\n\n```json\n{\n  \"rules\": {\n    \"claude-md-size\": \"warn\",\n    \"claude-md-import-missing\": \"error\",\n    \"claude-md-import-circular\": \"error\"\n  }\n}\n```\n\n## Inline Disable\n\nDisable specific rules inline:\n\n```markdown\n\u003C!-- claudelint-disable size-warning -->\n\nLarge file content here...\n\n\u003C!-- claudelint-enable size-warning -->\n```\n\nOr disable for a single line:\n\n```markdown\n\u003C!-- claudelint-disable-next-line import-missing -->\n\n@import non-existent-file.md\n```\n\n## Exit Codes\n\n- `0` - No errors or warnings\n- `1` - Warnings found (or warnings treated as errors)\n- `2` - Errors found\n\n## Common Issues\n\n### Error: \"File exceeds 50KB\"\n\n**Cause**: CLAUDE.md file is too large for Claude's context window\n**Solution**: Split content into .claude\u002Frules\u002F files using @import directives\n**Example**: Move testing guidelines to .claude\u002Frules\u002Ftesting.md and add `@import .claude\u002Frules\u002Ftesting.md` to CLAUDE.md\n\n### Error: \"Import not found: .claude\u002Frules\u002Ftesting.md\"\n\n**Cause**: @import directive points to a file that doesn't exist\n**Solution**: Check the path is correct relative to CLAUDE.md\n**Common mistakes:**\n\n- Using `@import ..\u002Frules\u002Ftesting.md` (wrong - don't use ..)\n- Using `@import rules\u002Ftesting.md` (wrong - missing .claude\u002F)\n- Correct: `@import .claude\u002Frules\u002Ftesting.md`\n\n### Error: \"Circular import detected\"\n\n**Cause**: File A imports B which imports A (infinite loop)\n**Solution**: Reorganize imports to be one-directional\n**Example**: CLAUDE.md should import .claude\u002Frules\u002F files, but those files should not import CLAUDE.md back\n\n### Warning: \"File exceeds 30KB\"\n\n**Cause**: File is approaching the safe limit for Claude's context\n**Solution**: Not urgent, but consider splitting large sections into @imports\n**Why 30KB?** Claude can handle up to ~50KB, but staying under 30KB leaves room for growth and keeps context manageable\n\n## See Also\n\n- [validate-all](..\u002Fvalidate-all\u002FSKILL.md) - Run all validators\n- [format-cc](..\u002Fformat-cc\u002FSKILL.md) - Format markdown files with markdownlint\u002Fprettier\n","# Validate CLAUDE.md Files\n\nRuns `claudelint validate-claude-md` to validate CLAUDE.md files including:\n\n- File size limits (30KB warning, 50KB error)\n- @import directive validation\n- Frontmatter validation in .claude\u002Frules\u002F files\n- Section organization\n\n## Usage\n\n```bash\nclaudelint validate-claude-md $ARGUMENTS\n```\n\n## Options\n\n- `--path \u003Cpath>` - Validate specific CLAUDE.md file\n- `--verbose` - Show detailed output\n- `--warnings-as-errors` - Treat warnings as errors\n- `--explain` - Show detailed explanations and fix suggestions\n\n## Examples\n\n### Example 1: Claude says context is too large\n\n**User says**: \"Claude keeps saying my instructions are too long and won't load them\"\n**What happens**:\n\n1. Skill runs `claudelint validate-claude-md`\n2. Shows CLAUDE.md is 52KB (exceeds 50KB hard limit)\n3. Identifies 3 largest sections: API docs (18KB), Git workflow (12KB), Testing guide (8KB)\n4. Shows how to split: create .claude\u002Frules\u002Fapi.md and add `@import .claude\u002Frules\u002Fapi.md`\n\n**Result**: User splits sections, CLAUDE.md now 28KB, Claude loads it successfully\n\n### Example 2: Import shows \"file not found\" in Claude\n\n**User says**: \"I added @import .claude\u002Frules\u002Ftesting.md but Claude says the file doesn't exist\"\n**What happens**:\n\n1. Skill validates @import path\n2. Finds file is at `.claude\u002Frules\u002Ftests.md` not `testing.md` (typo)\n3. Also checks .claude\u002Frules\u002Ftests.md exists and has valid frontmatter\n4. Shows corrected import line\n\n**Result**: User fixes filename typo, import loads correctly\n\n### Example 3: Rules file won't apply to specific paths\n\n**User says**: \"My .claude\u002Frules\u002Fbackend.md isn't applying when I edit backend files\"\n**What happens**:\n\n1. Skill checks frontmatter in .claude\u002Frules\u002Fbackend.md\n2. Finds `paths: \"backend\u002F*\"` (string) should be `paths: [\"backend\u002F**\u002F*\"]` (array with glob)\n3. Explains paths field requires array of glob patterns\n4. Shows corrected frontmatter\n\n**Result**: Rules now apply to backend directory correctly\n\n### Command Examples\n\nValidate all CLAUDE.md files:\n\n```bash\nclaudelint validate-claude-md\n```\n\nValidate specific file:\n\n```bash\nclaudelint validate-claude-md --path \u002Fpath\u002Fto\u002FCLAUDE.md\n```\n\nVerbose output with explanations:\n\n```bash\nclaudelint validate-claude-md --verbose --explain\n```\n\n## What Gets Validated\n\n### File Size\n\n- Warns if file exceeds 30KB (approaching context limit)\n- Errors if file exceeds 50KB (exceeds safe context limit)\n- Suggests splitting into .claude\u002Frules\u002F for large files\n\n### Import Validation\n\n- Checks that @import directives point to existing files\n- Detects circular import dependencies\n- Validates import depth limits\n\n### Frontmatter (for .claude\u002Frules\u002F files)\n\n- Validates YAML frontmatter syntax\n- Checks `paths` field is string or array\n- Ensures frontmatter is properly closed\n\n### Content Organization\n\n- Warns if CLAUDE.md has >20 sections\n- Suggests moving content to .claude\u002Frules\u002F for better organization\n\n## Configuration\n\nRules can be configured in `.claudelintrc.json`:\n\n```json\n{\n  \"rules\": {\n    \"claude-md-size\": \"warn\",\n    \"claude-md-import-missing\": \"error\",\n    \"claude-md-import-circular\": \"error\"\n  }\n}\n```\n\n## Inline Disable\n\nDisable specific rules inline:\n\n```markdown\n\u003C!-- claudelint-disable size-warning -->\n\nLarge file content here...\n\n\u003C!-- claudelint-enable size-warning -->\n```\n\nOr disable for a single line:\n\n```markdown\n\u003C!-- claudelint-disable-next-line import-missing -->\n\n@import non-existent-file.md\n```\n\n## Exit Codes\n\n- `0` - No errors or warnings\n- `1` - Warnings found (or warnings treated as errors)\n- `2` - Errors found\n\n## Common Issues\n\n### Error: \"File exceeds 50KB\"\n\n**Cause**: CLAUDE.md file is too large for Claude's context window\n**Solution**: Split content into .claude\u002Frules\u002F files using @import directives\n**Example**: Move testing guidelines to .claude\u002Frules\u002Ftesting.md and add `@import .claude\u002Frules\u002Ftesting.md` to CLAUDE.md\n\n### Error: \"Import not found: .claude\u002Frules\u002Ftesting.md\"\n\n**Cause**: @import directive points to a file that doesn't exist\n**Solution**: Check the path is correct relative to CLAUDE.md\n**Common mistakes:**\n\n- Using `@import ..\u002Frules\u002Ftesting.md` (wrong - don't use ..)\n- Using `@import rules\u002Ftesting.md` (wrong - missing .claude\u002F)\n- Correct: `@import .claude\u002Frules\u002Ftesting.md`\n\n### Error: \"Circular import detected\"\n\n**Cause**: File A imports B which imports A (infinite loop)\n**Solution**: Reorganize imports to be one-directional\n**Example**: CLAUDE.md should import .claude\u002Frules\u002F files, but those files should not import CLAUDE.md back\n\n### Warning: \"File exceeds 30KB\"\n\n**Cause**: File is approaching the safe limit for Claude's context\n**Solution**: Not urgent, but consider splitting large sections into @imports\n**Why 30KB?** Claude can handle up to ~50KB, but staying under 30KB leaves room for growth and keeps context manageable\n\n## See Also\n\n- [validate-all](..\u002Fvalidate-all\u002FSKILL.md) - Run all validators\n- [format-cc](..\u002Fformat-cc\u002FSKILL.md) - Format markdown files with markdownlint\u002Fprettier\n",{"name":5,"version":37,"description":7,"allowed-tools":38,"argument-hint":40},"1.0.0",[39],"Bash(claudelint:*)","[flags]","main","c019fbcb2b647fcfcfa32c022ba49c200fb43545","skills\u002Fvalidate-cc-md",4,"https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint","https:\u002F\u002Fwww.claudelint.com","https:\u002F\u002Fgithub.com\u002Fpdugan20","pdugan.com","Front front, back back, sucker grab a snack pack.","2026-11-03 12:40:21",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add pdugan20\u002Fclaudelint --skill validate-cc-md",{"tool":57,"command":58},"bunx","bunx skills add pdugan20\u002Fclaudelint --skill validate-cc-md",{"tool":60,"command":61},"pnpm","pnpm dlx skills add pdugan20\u002Fclaudelint --skill validate-cc-md","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint\u002Fblob\u002Fmain\u002Fskills\u002Fvalidate-cc-md\u002FSKILL.md",true,[65,71],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"CHANGELOG.md","REFERENCE","参考文档",305,"https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint\u002Fblob\u002Fmain\u002Fskills\u002Fvalidate-cc-md\u002FCHANGELOG.md",{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"validate-cc-md.sh","SCRIPT","脚本",479,"https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint\u002Fblob\u002Fmain\u002Fskills\u002Fvalidate-cc-md\u002Fvalidate-cc-md.sh",[78,102,112,122,135,151],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":92,"publishedAt":32},"01M6CHZFHQSY664AF5VNA0WEB2","test-skill","A valid test skill for testing purposes. Use this when you want to test skill validation.","https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Fvalid\u002FSKILL.md",[84,89],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":90,"categoryName":91,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000023","Skill与智能体开发",[93,94,95,96,97,98,99,100,24,101,29],"Test Skill","test","skill validation","testing","valid","validation","npm","package","read",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":109,"publishedAt":32},"01M6CHZDBSQ0420H4C7K3NMFC0","no-version-skill","This skill is missing the version field for testing purposes.","https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Fno-version\u002FSKILL.md",[108],{"categoryNo":90,"categoryName":91,"taxonomyType":87,"taxonomyTypeDesc":88},[110,111,96,24],"version","no version skill",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":119,"publishedAt":32},"01M6CHZAZNT9325HAHNM1PPA7E","dangerous-skill","This skill contains dangerous commands for testing security validation.","https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Fdangerous-command\u002FSKILL.md",[118],{"categoryNo":90,"categoryName":91,"taxonomyType":87,"taxonomyTypeDesc":88},[120,98,24,121,96],"dangerous skill","security",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":130,"publishedAt":32},"01M6CHZ8DGCR8TJYYFH5F8PTEA","example-skill","Use this to run the complete test suite for the project","https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fprojects\u002Fvalid-complete\u002F.claude\u002Fskills\u002Fexample-skill\u002FSKILL.md",[128,129],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},{"categoryNo":90,"categoryName":91,"taxonomyType":87,"taxonomyTypeDesc":88},[131,132,94,133,24,101,29,134],"example","example skill","run","test suite",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":142,"publishedAt":32},"01M6CHZ5YH5D51B5JCBVJNKXMK","advanced-skill","Use this to deploy the project using Firebase tools and MCP integration","https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fprojects\u002Fvalid-complete\u002F.claude\u002Fskills\u002Fadvanced-skill\u002FSKILL.md",[141],{"categoryNo":90,"categoryName":91,"taxonomyType":87,"taxonomyTypeDesc":88},[143,144,145,146,147,148,149,150,24,29],"advanced skill","write","MCP","deploy","integration","Tools","firebase","MCP Integration",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":157,"publishedAt":32},"01M6CHZ3Q0J7W745YQC4126XZF","WRONG_NAME","I do it","https:\u002F\u002Fgithub.com\u002Fpdugan20\u002Fclaudelint\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fprojects\u002Finvalid-all-categories\u002F.claude\u002Fskills\u002Fbad-skill\u002FSKILL.md",[],[158,24,144,159],"wrong name","do"]