{"_id":"@carlrannaberg/cclint","_rev":"12-4157b1434c62f4e3b19f6ad147d3536a","name":"@carlrannaberg/cclint","dist-tags":{"latest":"0.2.10"},"versions":{"0.1.0":{"name":"@carlrannaberg/cclint","version":"0.1.0","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.1.0","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"9adc57a23c51b0e56c9ede511f2e86ebe477d51b","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.1.0.tgz","fileCount":33,"integrity":"sha512-uiGLkiZlk1kpcB0WA1YgqTo2e5fNyjL/GYUKqZVXaOYrAXkIy/5sA35cxO5W5gZesFV/LImftUDA5x05wGeVpg==","signatures":[{"sig":"MEUCICxANyDwipU0EHV31arNWCwizrzE2c0/zx/7j3AuTsQAAiEArlhUqvfe8lQahZEzTEJuTQYyShc+Hrmu37MkISb3LWg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136511},"main":"dist/cli.js","type":"module","types":"./dist/cli.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2c2909bb4504074e3e3a164db302f8a30cb8a1e2","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.1.0_1755985953666_0.01211077757720691","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@carlrannaberg/cclint","version":"0.2.0","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.2.0","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"9902a0b239a7eb122166d5294a5dcadf6f1a79be","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.0.tgz","fileCount":43,"integrity":"sha512-M6qLMTyqAE/561tP4J3+QprxK6Al3vIUca05W2OP2GfrvvONFU3SXpc6s8tHpAGrYnjNAZzKJmQ1QvDrlhJJFw==","signatures":[{"sig":"MEYCIQDEyaYUBhiQVn617w7VosAUWY61XTHuwAP1M8TngVuX0gIhAJoriYZN21LD272tO2qrt2D5YLDwUI1EyWBLKuFVRCqq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169121},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"70a53f5a00b5e5185293f4eecf797493c62fdfa4","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.2.0_1756364654415_0.8411978385196797","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@carlrannaberg/cclint","version":"0.2.1","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.2.1","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"db116fce1a6e2cd1ab06a617642ef69bee870ce5","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.1.tgz","fileCount":43,"integrity":"sha512-JSPavuYjt5mbd/smIv0mWNmKP0hP1ujrTC7OOiSAuPhLI0lAvHVLs8PgLNRhCKqVDQPNhsLU91wfKRneopzh9Q==","signatures":[{"sig":"MEUCIDsHFbPbOH3MDp9dDtmOJqnSmm6ERL5XwJM1tjvwHpmPAiEA3FlJQCqdn5MwTJLTr7dCh3ebNHao0f8aZJSw3e50Vpg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169139},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"c637e04f435c4cc524e11ffb6b9449e1cb85018d","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.2.1_1756382210370_0.16846934583433226","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@carlrannaberg/cclint","version":"0.2.2","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.2.2","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"2a29f5f0d9a664824766b0387081d6458982c637","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.2.tgz","fileCount":43,"integrity":"sha512-cnowpW90yGycslU03Ea6RCqX5JtwM8kxMwQr5MCjMT7XZ1kb8ohK4Bl2GFbcvlCB4pMC01EsGvVvOj1zxNj41g==","signatures":[{"sig":"MEUCIFV82FBveaFBf6l4V++TMay9TDoEuL3+2LbbfZIsX79WAiEAmc+XQqWBr3E5s48017Ea2SKglnluVwmvIa3wnKa6X7o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174630},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"6d6940d64a4c77b76ce534fd8f76bf44f0c79eca","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.2.2_1756383520188_0.7786542061540223","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@carlrannaberg/cclint","version":"0.2.3","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.2.3","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"13c00f34e03bcbc15d0b3199cf16e559ce384ac7","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.3.tgz","fileCount":43,"integrity":"sha512-P3iDPNFEz0E01b1NoiZmDJ+0ZosMpkpUQMlIBZ7vv879WiBeGStY+8OykSXOEmOQnPIiuH/pHrfG2XIuXDPeJw==","signatures":[{"sig":"MEUCIQDPJ2XJGcNeJ3hWsaqr6WJBcF7VyvzuXpB384k1eybF/AIgWUjjAwP8yrmnkaIGeDycVyWjhnPxONvV/WanVohDSsM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174509},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"771ffc29dcab16ff5b99f683f125b09993eb2baa","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.2.3_1756385747307_0.8893696839023555","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@carlrannaberg/cclint","version":"0.2.4","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.2.4","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"815ff37915d70c3ab043961b27794344859259ad","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.4.tgz","fileCount":43,"integrity":"sha512-eHjGzHXdl5QKZjcE0EkmuaD+RaJRQA4NyvE6n8t/Q5IUZylhO6Q/i78rjpt9p/tRjC9BZnLUGgfRC21xuebDBg==","signatures":[{"sig":"MEQCIH9KVng+B8q03w+I8KTBbS8BVvYCzZg792wpwsPa8i0DAiAVbz9BvQzD/3z3hSwchTF+kHp/z5A7tDP8h7ltCeK57Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174571},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"bb9609ee8f7af7230c6011faf0120db3cabec758","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.2.4_1756387123662_0.4498418639005102","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@carlrannaberg/cclint","version":"0.2.5","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.2.5","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"9ec1ebae5aed6d021e9113bb0ab2b83e4badc5ab","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.5.tgz","fileCount":43,"integrity":"sha512-YCNVWVDFjYll3YD7oEKmXCQ5C1l9HQxgyg+BPgQCNb7kaqKMNKX+Z0tCWGuOB8DpctT0P00Qkgv8DRXee83FHQ==","signatures":[{"sig":"MEYCIQDV1w+Gab3g47QrWCcq6zmzR8ade8HT/XRXA/BOt5kdiwIhAONuqBugUysTEaaED6un/IlEeHXOrDzFfTw4RG5HtNxD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":174571},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"8c9478f7d999d8d5ae7b8c1403e339240a288152","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.2.5_1756387377788_0.43110297436729095","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@carlrannaberg/cclint","version":"0.2.6","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.2.6","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"d76cb6c0cfdd729538e57fbb995f52c730e12f4d","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.6.tgz","fileCount":43,"integrity":"sha512-+kCuM27ecPqkff4iD22vFzPGNFHuH4Dyr9ilOyA7QJUu+qiQTBH3OyNnf9bzVy0V8IE3Gk+6ysJvF6Dz6X9tDQ==","signatures":[{"sig":"MEQCICkmTliJ82nuH4Z/kXB/lWW+Oj7VzeN+v4/eHv+o4dySAiBNN8naWgt6qurLULyMUZQAHMqpFkpqK6x8bNFHgNVJyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177871},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"f5c8cd977896250d3313ffef9fb7d2bbf4e3a76d","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.2.6_1756390821492_0.23737791183567225","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@carlrannaberg/cclint","version":"0.2.7","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.2.7","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"5136b0a9e4eea8df6edd25e08cc5ffa13cf8e7ff","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.7.tgz","fileCount":43,"integrity":"sha512-v7JR3dv9dUbDbnSHcwvMjTPKxCnCaI7Qx9618s5FcaIOqkzIIRbwu9e9M/jMN+qJlkev6yJo7FBF/+4iH9pQvA==","signatures":[{"sig":"MEQCICh0dQYKHiknsCB4gzVUtS+8W/lFBvxAj2f/JdBDB31fAiA+Nyj6GyC5qATgw+QFqQcwtsRLeQkDmNYyO9/I4jrPSQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177678},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"122b85286f288b6644e8e0c9a7cbf8b481ac3e85","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","picomatch":"^4.0.3","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/picomatch":"^4.0.2","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.2.7_1756391889998_0.0797812980653736","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@carlrannaberg/cclint","version":"0.2.8","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.2.8","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"91ecadb977022cbe32b2bd67fe7a6784d48125ec","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.8.tgz","fileCount":43,"integrity":"sha512-FQ3Q06TnegvANiiEok9fDp21It/t/3oO3B+pn1W4HpGMAD11R7PN/qqKpNQkQV9XzJmvLKY5Yc3fXhcr6R3FtQ==","signatures":[{"sig":"MEUCIHI0eAedA9rXYr6t9v9+V9sLddZTRiJXPXAd68ByooBdAiEAt7pXC3K7z/npGtWYxC37F8qPhEeY6jLezs8n0+Hz49I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178649},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"dd883eb7c11fe1518045f80d7b255aa65847a327","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","picomatch":"^4.0.3","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/picomatch":"^4.0.2","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.2.8_1756413260867_0.700898913413017","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"@carlrannaberg/cclint","version":"0.2.9","keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","_id":"@carlrannaberg/cclint@0.2.9","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"homepage":"https://github.com/carlrannaberg/cclint#readme","bugs":{"url":"https://github.com/carlrannaberg/cclint/issues"},"bin":{"cclint":"bin/cclint.js"},"dist":{"shasum":"2c9703529f9b67e19cb0c0e2c1c2a1b512ed6c94","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.9.tgz","fileCount":43,"integrity":"sha512-pZIOYU3fuRnCILNFCZW5WddM0ghud1MkYWNKxsAgLk2i2I/IEm+0XoZSQkqW1n7RfZ+J0ukV450j66MKuRGMWw==","signatures":[{"sig":"MEUCICHZWaCvEOUC+yiKXQo9Lc0CxveyQWqi6LfX2Ds+XILyAiEA4KeKMV0j1UjmsEE33BNq8YZdxc2zlHE+DNphz52rRDQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":178893},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"02843cbf6676e0e45ae56c40f2200193a057f872","scripts":{"dev":"tsc --watch","lint":"eslint src/**/*.ts","test":"vitest run","build":"tsc","format":"prettier --write src/**/*.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"repository":{"url":"git+https://github.com/carlrannaberg/cclint.git","type":"git"},"_npmVersion":"11.3.0","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","directories":{},"_nodeVersion":"24.2.0","dependencies":{"ora":"^8.0.1","zod":"^3.22.4","glob":"^10.3.10","chalk":"^5.3.0","commander":"^11.1.0","picomatch":"^4.0.3","gray-matter":"^4.0.3"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.55.0","vitest":"^3.2.4","prettier":"^3.1.0","typescript":"^5.3.0","@types/node":"^20.10.0","@types/picomatch":"^4.0.2","@typescript-eslint/parser":"^6.14.0","@typescript-eslint/eslint-plugin":"^6.14.0"},"_npmOperationalInternal":{"tmp":"tmp/cclint_0.2.9_1757008910501_0.642678634768955","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@carlrannaberg/cclint","version":"0.2.10","description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"},"./cli":{"import":"./dist/cli.js","types":"./dist/cli.d.ts"}},"bin":{"cclint":"bin/cclint.js"},"type":"module","scripts":{"build":"tsc","dev":"tsc --watch","test":"vitest run","prepublishOnly":"npm run build","lint":"eslint src/**/*.ts","format":"prettier --write src/**/*.ts"},"keywords":["claude","claude-code","lint","validation","cli"],"author":{"name":"Carl"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/carlrannaberg/cclint.git"},"bugs":{"url":"https://github.com/carlrannaberg/cclint/issues"},"homepage":"https://github.com/carlrannaberg/cclint#readme","dependencies":{"chalk":"^5.3.0","commander":"^11.1.0","glob":"^10.3.10","gray-matter":"^4.0.3","ora":"^8.0.1","picomatch":"^4.0.3","zod":"^3.22.4"},"devDependencies":{"@types/node":"^20.10.0","@types/picomatch":"^4.0.2","@typescript-eslint/eslint-plugin":"^6.14.0","@typescript-eslint/parser":"^6.14.0","eslint":"^8.55.0","prettier":"^3.1.0","typescript":"^5.3.0","vitest":"^3.2.4"},"engines":{"node":">=18.0.0"},"_id":"@carlrannaberg/cclint@0.2.10","gitHead":"47cea00a1ef78209232fddcb36e587b9b611a60c","_nodeVersion":"24.2.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-WFshTbkcWCzMACdoUTa/EDrW9NUfq1hW1bjBQMdvbXlIYC/AXgJ1z2nBSkTacjKdcRveN+SI9krQR7yLdgCT5g==","shasum":"8fbc367aa7f373bce819d29c5b26dbbaf8c3dcd6","tarball":"https://registry.npmjs.org/@carlrannaberg/cclint/-/cclint-0.2.10.tgz","fileCount":43,"unpackedSize":179213,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIH2pyqBE2XE3eaO1yWDVuawJNcrjNDf7YbiyriQtZyGgAiBeUXD9CudLDvyzbJQVDKwlVlVPRTc3HYyWWhfwRJ3XZw=="}]},"_npmUser":{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"},"directories":{},"maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cclint_0.2.10_1757508386241_0.9405606851014165"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-23T21:52:33.593Z","modified":"2025-09-10T12:46:26.599Z","0.1.0":"2025-08-23T21:52:33.886Z","0.2.0":"2025-08-28T07:04:14.608Z","0.2.1":"2025-08-28T11:56:50.570Z","0.2.2":"2025-08-28T12:18:40.414Z","0.2.3":"2025-08-28T12:55:47.501Z","0.2.4":"2025-08-28T13:18:43.838Z","0.2.5":"2025-08-28T13:22:57.972Z","0.2.6":"2025-08-28T14:20:21.740Z","0.2.7":"2025-08-28T14:38:10.200Z","0.2.8":"2025-08-28T20:34:21.085Z","0.2.9":"2025-09-04T18:01:50.712Z","0.2.10":"2025-09-10T12:46:26.433Z"},"bugs":{"url":"https://github.com/carlrannaberg/cclint/issues"},"author":{"name":"Carl"},"license":"MIT","homepage":"https://github.com/carlrannaberg/cclint#readme","keywords":["claude","claude-code","lint","validation","cli"],"repository":{"type":"git","url":"git+https://github.com/carlrannaberg/cclint.git"},"description":"Claude Code Lint - A comprehensive linting tool for Claude Code projects","maintainers":[{"name":"carlrannaberg","email":"carlrannaberg@gmail.com"}],"readme":"# cclint (Claude Code Lint)\n\n[![npm version](https://img.shields.io/npm/v/@carlrannaberg/cclint.svg)](https://www.npmjs.com/package/@carlrannaberg/cclint)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js Version](https://img.shields.io/node/v/@carlrannaberg/cclint.svg)](https://nodejs.org)\n\nA comprehensive linting tool for Claude Code projects that validates agent definitions, command configurations, settings files, and project documentation.\n\n## Features\n\n- **Agent/Subagent Linting**: Validates frontmatter, tools configuration, and naming conventions\n- **Command Linting**: Checks slash command definitions and tool permissions\n- **Settings Validation**: Validates `.claude/settings.json` hook configurations\n- **Documentation Linting**: Ensures CLAUDE.md follows best practices and template structure\n- **Custom Schema Support**: Extend base schemas with Zod for project-specific validation\n- **Project Auto-Detection**: Automatically finds project root using directory climbing\n- **Multiple Output Formats**: Console, JSON, and Markdown reports\n- **CI/CD Friendly**: Configurable exit codes and quiet mode\n\n## Installation\n\n```bash\n# Install globally\nnpm install -g @carlrannaberg/cclint\n\n# Install as dev dependency\nnpm install --save-dev @carlrannaberg/cclint\n\n# Use without installing\nnpx @carlrannaberg/cclint\n```\n\n## Usage\n\n### Basic Linting\n\n```bash\n# Lint current project (auto-detects root)\ncclint\n\n# Lint specific directory\ncclint --root /path/to/project\n\n# Quiet mode (minimal output)\ncclint --quiet\n\n# Verbose mode (show all files)\ncclint --verbose\n```\n\n### Specialized Linting\n\nLint only specific file types for faster, focused validation:\n\n```bash\n# Lint only agent definition files\ncclint agents\n\n# Lint only command definition files  \ncclint commands\n\n# Lint only settings.json files\ncclint settings\n\n# Lint only CLAUDE.md context files\ncclint context\n\n# Use with options for specialized linting\ncclint agents --verbose --follow-symlinks\ncclint commands --root /path/to/project --quiet\n```\n\n### Report Generation\n\n```bash\n# Generate JSON report\ncclint --format json --output lint-report.json\n\n# Generate Markdown report\ncclint --format markdown --output reports/lint-report.md\n```\n\n### CI/CD Integration\n\n```bash\n# Fail on errors only (default)\ncclint --fail-on error\n\n# Fail on warnings or errors\ncclint --fail-on warning\n\n# Fail on suggestions, warnings, or errors\ncclint --fail-on suggestion\n\n# Disable custom schema validation\ncclint --no-custom-schemas\n```\n\n### Symlink Support\n\n```bash\n# Follow symlinks when discovering files (secure by default)\ncclint --follow-symlinks\n\n# Symlinks are NOT followed by default for security\n# When enabled, validates that symlink targets remain within project root\n# Useful for projects with shared agent/command definitions\n```\n\n## SDK/Programmatic Usage\n\nCCLint can be used programmatically in your Node.js applications:\n\n```javascript\nimport CClint from '@carlrannaberg/cclint';\n\n// Create linter instance\nconst linter = new CClint();\n\n// Lint entire project\nconst summary = await linter.lintProject('./my-project', {\n  quiet: true,\n  followSymlinks: true  // Enable symlink support\n});\n\n// Lint specific file types\nconst agentResults = await linter.lintAgents('./my-project');\nconst commandResults = await linter.lintCommands('./my-project');\n```\n\n### Return Types Explained\n\n**`lintProject()`** returns a `LintSummary`:\n```javascript\n{\n  totalFiles: 35,\n  validFiles: 24,\n  totalErrors: 11,\n  totalWarnings: 2,\n  totalSuggestions: 0,\n  duration: 150,\n  results: [...] // Array of all individual file results\n}\n```\n\n**`lintAgents()`, `lintCommands()`, etc.** return `LintResult[]`:\n```javascript\n[\n  {\n    file: '/path/to/agent.md',\n    valid: true,\n    errors: [],\n    warnings: [],\n    suggestions: [],\n    missingFields: []\n  },\n  // ... more individual file results\n]\n```\n\n### Use Cases\n\n- **`lintProject()`**: Full project validation, CI/CD integration, comprehensive reports\n- **`lintAgents()`**: Validate only agent definitions, useful for agent-focused tools\n- **`lintCommands()`**: Validate only command definitions, useful for command management tools\n- **`lintSettings()`**: Validate settings.json, useful for configuration tools\n\n## What It Checks\n\n### Official Claude Code Fields\n\ncclint validates against the official Claude Code specifications. Any additional fields must be added via custom schema extensions.\n\n#### Agent/Subagent Frontmatter Fields\n\n**Required:**\n- `name` - Agent identifier (lowercase, alphanumeric with hyphens)\n- `description` - Natural language description of when to invoke\n\n**Optional:**\n- `tools` or `allowed-tools` - Tool access: \"*\" for all, or array of tool names\n- `model` - Preferred model: sonnet, opus, haiku, sonnet[1m], opusplan, inherit\n- `color` - UI color (must be one of: red, blue, green, yellow, purple, orange, pink, cyan)\n\n#### Command Frontmatter Fields\n\n**All fields are optional:**\n- `description` - Command description (defaults to first heading or line from content)\n- `allowed-tools` - Tools the command can use (string format: \"Tool1, Tool2\")\n- `argument-hint` - Hint for command arguments shown in UI\n- `model` - Model to use (same values as agents)\n\n### Agent/Subagent Files (*.md with frontmatter)\n\n- ✅ Required fields: `name`, `description`\n- ✅ Tool configurations and syntax\n- ✅ Color validation (8 valid Claude Code colors: red, blue, green, yellow, purple, orange, pink, cyan)\n- ✅ Naming conventions and filename matching\n- ⚠️ Unknown tools and deprecated fields\n- 💡 Content optimization suggestions\n\n### Command Files (*.md with frontmatter)\n\n- ✅ Frontmatter schema validation\n- ✅ Tool permissions in `allowed-tools`\n- ✅ Bash command usage validation\n- ✅ File reference patterns\n- ⚠️ Unknown tools and syntax errors\n- 💡 Missing descriptions and argument hints\n\n### Settings Files (.claude/settings.json)\n\n- ✅ JSON syntax and schema validation\n- ✅ Hook configuration structure\n- ✅ Event types and matchers\n- ✅ Command syntax validation\n- ⚠️ Unknown hook events and tools\n- 💡 Configuration optimization suggestions\n\n### Documentation (CLAUDE.md/AGENTS.md)\n\n- ✅ Required sections presence\n- ✅ Document structure validation\n- ✅ Template compliance checking\n- ⚠️ Missing sections and content\n- 💡 Content quality improvements\n\n## Project Structure Detection\n\ncclint automatically detects your project root by climbing up directories looking for:\n\n- `.git` directory\n- `package.json` file\n- `.claude` directory\n\nIt then scans for files in common locations:\n\n```\nproject-root/\n├── .claude/\n│   ├── settings.json     # Settings validation\n│   ├── agents/           # Agent definitions\n│   └── commands/         # Command definitions\n├── src/\n│   ├── agents/           # Alternative agent location\n│   └── commands/         # Alternative command location\n├── CLAUDE.md             # Documentation validation\n└── AGENTS.md             # Alternative documentation\n```\n\n## Configuration\n\ncclint works without configuration by using sensible defaults and auto-detection. For advanced usage, you can:\n\n1. **Specify custom paths** with `--root`\n2. **Control output verbosity** with `--quiet`/`--verbose`\n3. **Choose output formats** with `--format`\n4. **Set failure thresholds** with `--fail-on`\n5. **Create custom schemas** with configuration files\n\n### Custom Schema Configuration\n\ncclint supports extending the base validation schemas with your own Zod schemas for project-specific requirements.\n\n#### Configuration Files\n\ncclint looks for configuration in the following files (in order of precedence):\n\n- `cclint.config.js` - JavaScript configuration\n- `cclint.config.mjs` - ES Module configuration  \n- `cclint.config.ts` - TypeScript configuration (requires compilation)\n- `.cclintrc.json` - JSON configuration\n- `.cclintrc.js` - JavaScript configuration\n- `.cclintrc.mjs` - ES Module configuration\n\n#### JSON Configuration Example\n\n```json\n{\n  \"agentSchema\": {\n    \"extend\": {\n      \"priority\": \"number\",\n      \"tags\": \"array\",\n      \"experimental\": \"boolean\"\n    }\n  },\n  \"commandSchema\": {\n    \"extend\": {\n      \"timeout\": \"number\",\n      \"retryCount\": \"number\"\n    }\n  },\n  \"rules\": {\n    \"unknownFields\": \"warning\",\n    \"strict\": true,\n    \"excludePatterns\": [\"**/legacy/**\"]\n  }\n}\n```\n\n#### JavaScript Configuration Example\n\n```javascript\n// cclint.config.js\nimport { z } from 'zod';\n\nexport default {\n  agentSchema: {\n    extend: {\n      // Custom fields for agents\n      priority: z.number().min(1).max(5).describe('Agent priority level'),\n      tags: z.array(z.string()).optional().describe('Categorization tags'),\n      experimental: z.boolean().optional().describe('Experimental feature flag'),\n      owner: z.string().email().describe('Agent maintainer email')\n    },\n    customValidation: (data) => {\n      const errors = [];\n      \n      // Custom validation logic\n      if (data.experimental && !data.description?.includes('EXPERIMENTAL')) {\n        errors.push('Experimental agents must include \"EXPERIMENTAL\" in description');\n      }\n      \n      if (data.priority > 3 && !data.owner) {\n        errors.push('High priority agents must have an owner assigned');\n      }\n      \n      return errors;\n    }\n  },\n  \n  commandSchema: {\n    extend: {\n      timeout: z.number().positive().describe('Command timeout in milliseconds'),\n      retryCount: z.number().min(0).max(3).default(0),\n      async: z.boolean().optional().describe('Run command asynchronously')\n    },\n    customValidation: (data) => {\n      const errors = [];\n      \n      if (data.async && !data.timeout) {\n        errors.push('Async commands must specify a timeout');\n      }\n      \n      return errors;\n    }\n  },\n  \n  settingsSchema: {\n    extend: {\n      // Custom settings fields\n      customHooks: z.record(z.array(z.string())),\n      teamSettings: z.object({\n        lead: z.string(),\n        members: z.array(z.string())\n      }).optional()\n    }\n  },\n  \n  claudeMdRules: {\n    requiredSections: [\n      'project overview',\n      'setup instructions', \n      'development workflow',\n      'testing strategy'\n    ],\n    customValidation: (content, sections) => {\n      const errors = [];\n      \n      if (!content.includes('## Security')) {\n        errors.push('CLAUDE.md must include a Security section');\n      }\n      \n      return errors;\n    }\n  },\n  \n  rules: {\n    unknownFields: 'error',\n    strict: true,\n    includePatterns: ['custom-agents/**'],\n    excludePatterns: ['**/legacy/**', '**/deprecated/**']\n  }\n};\n```\n\n#### TypeScript Configuration Example\n\n```typescript\n// cclint.config.ts\nimport { z } from 'zod';\nimport type { CclintConfig } from 'cclint';\n\nconst AgentPriority = z.enum(['low', 'medium', 'high', 'critical']);\n\nconst config: CclintConfig = {\n  agentSchema: {\n    extend: {\n      priority: AgentPriority,\n      team: z.string().min(1),\n      version: z.string().regex(/^\\d+\\.\\d+\\.\\d+$/)\n    }\n  }\n};\n\nexport default config;\n```\n\n#### Schema Override Example\n\nFor complete control, you can override the entire schema:\n\n```javascript\n// cclint.config.js\nimport { z } from 'zod';\n\nexport default {\n  agentSchema: {\n    override: z.object({\n      // Completely custom schema\n      id: z.string().uuid(),\n      name: z.string().min(1),\n      version: z.string(),\n      config: z.record(z.unknown())\n    }).strict()\n  }\n};\n```\n\n#### Configuration Options\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `agentSchema.extend` | `Record<string, ZodType>` | Additional fields for agent frontmatter |\n| `agentSchema.override` | `ZodType` | Complete replacement for agent schema |\n| `agentSchema.customValidation` | `(data) => string[]` | Custom validation function |\n| `commandSchema.*` | Same as agent | Custom command schema configuration |\n| `settingsSchema.*` | Same as agent | Custom settings schema configuration |\n| `claudeMdRules.requiredSections` | `string[]` | Required sections in CLAUDE.md |\n| `claudeMdRules.recommendedSections` | `string[]` | Recommended sections |\n| `claudeMdRules.customValidation` | `(content, sections) => string[]` | Custom validation |\n| `rules.unknownFields` | `'error' \\| 'warning' \\| 'suggestion' \\| 'ignore'` | How to handle unknown fields |\n| `rules.strict` | `boolean` | Enable strict mode validation |\n| `rules.includePatterns` | `string[]` | Additional file patterns to include |\n| `rules.excludePatterns` | `string[]` | File patterns to exclude |\n\n## Examples\n\n### GitHub Actions Integration\n\n```yaml\nname: Claude Code Lint\non: [push, pull_request]\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '18'\n      - run: npm install -g @carlrannaberg/cclint\n      - run: cclint --fail-on warning\n```\n\n### Pre-commit Hook\n\n```bash\n#!/bin/sh\n# .git/hooks/pre-commit\ncclint --quiet --fail-on error\n```\n\n### Report Generation Script\n\n```bash\n#!/bin/bash\n# scripts/lint-report.sh\nmkdir -p reports\ncclint --format markdown --output reports/claude-lint-$(date +%Y%m%d).md\necho \"Lint report generated in reports/\"\n```\n\n## Exit Codes\n\n- `0`: Success (no issues above failure threshold)\n- `1`: Failure (issues found above failure threshold)\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests if applicable\n5. Submit a pull request\n\n## License\n\nMIT\n\n## Related Projects\n\n- [Claude Code](https://claude.ai/code) - AI-powered coding assistant","readmeFilename":"README.md"}