{"_id":"@yuvrajangadsingh/vibecheck","_rev":"28-bd33ec37b5df59d249cbbcdef6d3e1a3","name":"@yuvrajangadsingh/vibecheck","dist-tags":{"latest":"1.21.0"},"versions":{"1.0.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.0.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli"],"author":{"name":"Yuvraj Angad Singh"},"license":"MIT","_id":"@yuvrajangadsingh/vibecheck@1.0.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js"},"dist":{"shasum":"fdfc82f8911e78c4063a144bfe47db4c8746c28e","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.0.0.tgz","fileCount":8,"integrity":"sha512-pMW/ZAOMIeldcoM3Np3aq50PJDz00RBywWN8XQlz9jGW3dQ98DROavwAEr7IHPjcYyVRHQxfA7kXe1wrtISuGQ==","signatures":[{"sig":"MEYCIQCi7mlPJAUmCQ4Xp30wmnfW+UlDoVn7QCeh43ReyMrgQQIhAK38Zls73npa6o36bTzYc+LcBDw5gtrbsAiMc/5yyLrs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104544},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"503761fa37a64377516bf1b46f7169d726342f2f","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint for AI slop. Detect AI-generated code smells in your JS/TS codebase.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.0.0_1772141571151_0.07105335580738914","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@yuvrajangadsingh/vibecheck","version":"1.0.1","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli"],"author":{"name":"Yuvraj Angad Singh"},"license":"MIT","_id":"@yuvrajangadsingh/vibecheck@1.0.1","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js"},"dist":{"shasum":"63019b3707c26dfd5b6441fd13974c8389f1e161","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.0.1.tgz","fileCount":8,"integrity":"sha512-lJmTj7TAcNZncmfLz3nvUY+gDe9QbxIsA4v6i2p/mpg68Rk3ScFfs7mSK+AtvX2HSqhaTSvwaCy7ESVG7dmdWQ==","signatures":[{"sig":"MEUCIQCl2j1k/LcpksizoZLK4eJgkyirWY86kg2Fi4DrtZ5C+QIgHM04DkcXoQF3q+vGZHRCLJYaAiCQgGiS6Ohpne8xtGY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":125211},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"1b42482a7345dc39eb84008d5e111ce64d89ef12","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint for AI slop. Detect AI-generated code smells in your JS/TS codebase.","directories":{},"_nodeVersion":"20.19.6","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.0.1_1772186957231_0.6270013826002911","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.1.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli"],"author":{"name":"Yuvraj Angad Singh"},"license":"MIT","_id":"@yuvrajangadsingh/vibecheck@1.1.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js"},"dist":{"shasum":"c5633e0b6708d5444565f5bfb87191c5e5feff24","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.1.0.tgz","fileCount":8,"integrity":"sha512-nQo8iNxid991CJacizjQ/zH5PoxySKWmiIiKGucpfeDlI6MrkFFJ0ZdwB47FdeRrIzi9F3iHdsZBy3uZlnKnWg==","signatures":[{"sig":"MEYCIQDiGlowM/VDugVfK3M0F9yBELD0rfaRV2Bd2EA8qREXQwIhAI7U2K4r1A5VJg+FEThHQxWgivEoJYgSflKAWcVq++D5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":148686},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"d90a0e78e25b028d2a039187dc3bcad39b63aa32","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint for AI slop. Detect AI-generated code smells in your JS/TS codebase.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.1.0_1773048583510_0.32007385509602626","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.2.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli"],"author":{"name":"Yuvraj Angad Singh"},"license":"MIT","_id":"@yuvrajangadsingh/vibecheck@1.2.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js"},"dist":{"shasum":"724ab8875bbd4827e0949cdf65d540ba67a10948","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.2.0.tgz","fileCount":8,"integrity":"sha512-v5diuRIpf3LHXjHQdggMKa/ybdLus1WdCjibAR/MWJ14fH3aWjrM+SLr0HUUEVQ6DpxVvP19dSW/ohQMv8Epkw==","signatures":[{"sig":"MEUCIQDgIgYOjEGXaIb+I2vbUccfJtbjgkU+OmWuG5rVGU6OvgIgSeSo/H9inaNoPslS2/GmyrhRGHOuhbY4TUOoKQk+jf8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":182091},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"a0b2d92b03919eaf3a463dbb137ce8c38a71f983","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint for AI slop. Detect AI-generated code smells in your JS/TS codebase.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.2.0_1773608218047_0.6462762394101242","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.3.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli"],"author":{"name":"Yuvraj Angad Singh"},"license":"MIT","_id":"@yuvrajangadsingh/vibecheck@1.3.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js"},"dist":{"shasum":"fe6ee08aebcc92ba9a32d3faa58a9d3fa440e423","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.3.0.tgz","fileCount":8,"integrity":"sha512-SugiEkXy+YvTZkFkp+Hgk4UxwPSqh7UTYZ3aqRtdf3s+Zvp//B7wV7d2wOJZEaF6mj5E5bSWq2Yb4NEy0V56HA==","signatures":[{"sig":"MEUCIQDiqQ7EX/4Fo70MRjgPZoO9L3XcvIbq8Dgnyo/+FqDtgAIgSBR/36qSn7LM4N41uwi9WGhrl1fGfQLCKIrKO+w7FuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209122},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"d99d920aeab3a28dad280b9875427fac6908da85","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint for AI slop. 32 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.3.0_1774455801980_0.2694683422214057","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.4.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli"],"author":{"name":"Yuvraj Angad Singh"},"license":"MIT","_id":"@yuvrajangadsingh/vibecheck@1.4.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js"},"dist":{"shasum":"4e27d1308c380767afe0368cdc8ddf3945322d0b","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.4.0.tgz","fileCount":8,"integrity":"sha512-+K7PHaI9bI3FUc63ZDXCs2g+uXjlVjGZ6BV5b3EvfWU9bJcoPUVt1H7zti2YqENHBDMXsZVS6J17gzMIYDYJ9Q==","signatures":[{"sig":"MEYCIQCucxEFFfOIQmLVizh2aMFw12aAk0hFWHoAyBCnuOmEWAIhALL+9hS0Y7ij5gqYP68iMXsw+8rKIa9Bt1eXuGPnuRtI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":215325},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"8792d8712bef9e45c636a7aeff4b3f9bed518a6b","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint for AI slop. 32 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.4.0_1774596377107_0.26059212423628875","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.5.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli"],"author":{"name":"Yuvraj Angad Singh"},"license":"MIT","_id":"@yuvrajangadsingh/vibecheck@1.5.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js"},"dist":{"shasum":"8efba38e3d578515a4e4badf72ef6b7285d17e58","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.5.0.tgz","fileCount":8,"integrity":"sha512-BP/ctP93Scu83WP3sTNvPyiDVlDFsNYDlT81rh24ogpOUxJDoh/bNoUT3cEyQf5mXOi6X9Bb13llBTvCNhYTjA==","signatures":[{"sig":"MEUCIQCRQN3DV3OLVWCncJrhqz5Zhb+5jzHTd1Y+eBvF2vvH/gIgdAJdG18Dem2bvdJBS2HgIymb2TqbyfdSGg+6ci13OoM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229895},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"e1fcb1226a34d8ff15c887f91edb2ddfb78ad3a7","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint for AI slop. 32 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.5.0_1775246318410_0.8350730505141415","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.6.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli"],"author":{"name":"Yuvraj Angad Singh"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.6.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js"},"dist":{"shasum":"206ee43b3b0849906a9945970d3027ff93b1d8b8","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.6.0.tgz","fileCount":10,"integrity":"sha512-xH14bl/QgURes3murN7qIR92/ZQhv6ecZvd9cvOOPJLuNUl1Zf2D0leEBtZyNLL9qIMDmjmyQ23skaswzmK6ZQ==","signatures":[{"sig":"MEQCIFJm6AEGST/Rax76qPvo86SDTWR5Rjc02cDmGrXy/py1AiAJPeWhmZy97CU7Cor72iP6ZBcz1GL3IhaEgWhWLGcVWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":363476},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"dae0c870d2e3d0e86ea9a1d5111a79476299d9b7","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint for AI slop. 34 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.6.0_1775293667706_0.24577677125005315","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.7.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli","mcp","model-context-protocol"],"author":{"name":"Yuvraj Angad Singh"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.7.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp.js"},"dist":{"shasum":"174f004456e32af6665c368f4d669f2f4aac89a8","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.7.0.tgz","fileCount":10,"integrity":"sha512-ScH7e9JJyqt9LOglpOPvCIkzKfTSN5U0EuIJUdeipHicTdSQa1w7XWqYlBg8KTTPA9OPfKG3zPRgCzd0nxEuCg==","signatures":[{"sig":"MEYCIQCtMguze5buEwvQyG4ZmaIxUjbzGD6bK/aKfjgSoMp3QwIhAKbBLI+3j/2F4PRail41inP5yP+DBI1G5rOJ7j3tkykZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":364258},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"9c1fbf05a778a14fdba84d965f549c51bacf6d8c","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"10.8.2","description":"ESLint for AI slop. 34 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.7.0_1775473241328_0.050858170058869945","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@yuvrajangadsingh/vibecheck","version":"1.7.1","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli","mcp","model-context-protocol"],"author":{"name":"Yuvraj Angad Singh"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.7.1","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp.js"},"dist":{"shasum":"7af8667163761de66e2f42f22b3c39c4c3d343d0","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.7.1.tgz","fileCount":10,"integrity":"sha512-4QXTo9MpbwzgikBzv0GjPkYiEQ7EmyXOt7VIJG4nPo8Kv7yjh3W5NBLnsa7VP8NVV+UdOW8MUz5BHQs5k3ex9w==","signatures":[{"sig":"MEQCIEaseD/cS5Hwo6dg5Zdwj+jn15jgSy8fMzgKWQQ0joNKAiAVLVOZOinxm63Rb9laMdNuNFoXroyAMkPDnKNoW2Qk4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":364307},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"c7d291bb08c540f04cd80c2222e079d54ee95c77","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.11.0","description":"ESLint for AI slop. 34 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.7.1_1775476341467_0.43772743137701187","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.8.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli","mcp","model-context-protocol"],"author":{"name":"Yuvraj Angad Singh"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.8.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp.js"},"dist":{"shasum":"8dfd9ee3154ba8192916d8da32d0b4232c82580b","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.8.0.tgz","fileCount":10,"integrity":"sha512-+b8XCeCBDPeDMJN/amhI+jrrnDGLXoGMlW3wqjFwHXdT01uVF9O5fE88vUj7AAyBRuA0rheTyfoRCRvjkdI40w==","signatures":[{"sig":"MEUCIQCZsVBYLF60o2K7tKLXd5SfmAgf22OoczSu2bnohVHUpAIgP+wqa+EIgqHaP8ml9X5S8aG+kjPlXdEiBW9KXJU+KhA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":379516},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"b8e1e11b686e34babf48f22ac058d3ab288edd4f","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.11.0","description":"ESLint for AI slop. 35 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.8.0_1777834011740_0.25494616795641734","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.9.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli","mcp","model-context-protocol"],"author":{"name":"Yuvraj Angad Singh"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.9.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp.js"},"dist":{"shasum":"09ab538d02499ca7703ec3bc43962c241f79530a","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.9.0.tgz","fileCount":10,"integrity":"sha512-Y2mnejQDYDypGH41HF1n3WgUM0k6EboYpMexUZkWGpejilfWT7POqEmEyjDgBvmldkA/nmH3W/aBmY+lF6cC0A==","signatures":[{"sig":"MEQCIGNuTZ6LT8emfx5ybvj9kPpCXx6ymxnf1UY+H8UAgr/wAiBSxmZ3N0z/m6ae6jT447eeXK99V/3UGlpBAMW5JahRWA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":439169},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"18423fc6ebc13876962991ce8a18febbb2ecd1c2","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.13.0","description":"ESLint for AI slop. 35 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.9.0_1780300946731_0.03322240713515412","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@yuvrajangadsingh/vibecheck","version":"1.9.1","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.9.1","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp.js"},"dist":{"shasum":"c0aaeb89fc1fbd0caeee0dd5f63bc7d091a8ffe6","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.9.1.tgz","fileCount":10,"integrity":"sha512-E9NPKXIP+O0NLB/RC2nsyW8wO/KneYGcVk/QOz4WEuguNXGIXrJCqTpCTgHNR/NpPouKGfXMjNM3RHwtNqMT+A==","signatures":[{"sig":"MEQCIBZr479mZ+dCHTaiywkSbioZraH2wtlt1pp4nTPk1k4BAiBE93VROM2Wv0bPidT1uNwLjrb2bdiDvAX7Wb8x6PXChQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":440337},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"2370ccd26d7f371d8c63303d5762da7632fa5f1d","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.13.0","description":"ESLint for AI slop. 35 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.9.1_1781095827502_0.9941593950880012","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.10.0","keywords":["linter","ai","slop","vibe-coding","code-quality","security","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.10.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp.js"},"dist":{"shasum":"7725d405d493e84d8ed82268a7a9fc05999ed017","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.10.0.tgz","fileCount":10,"integrity":"sha512-PWBrIcKjDvC/XVDAQmnqySMmfeLunuiGoIpPKiDmrBoeOnw/Ff8xk8H3ZBWmfmE4zXdxOpc9jbdbGJ3/9INFlw==","signatures":[{"sig":"MEUCIEVam1fkIzPmw123pfZ+4Hdzv4OP/kZ8rZFiluz935uPAiEAr6I6iGVidpBwaaNBlZ+YjxieUmDf7uJJUfILhOom2RQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":447674},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"bb59c6310d0178ced67d23643ed38a3e9c936fe9","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 35 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.10.0_1783330969475_0.5247613719291437","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.11.0","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.11.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"33e2a9b1a8864ef98b20314ac31b111b12234885","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.11.0.tgz","fileCount":12,"integrity":"sha512-PAk/SChqpFpcfhghIXhal5mAWOfKZbXg2V3lIlxsIfiajoYZh7VUxrDBTL1WtPD1wxK576A5xwBGrrTJYxla6Q==","signatures":[{"sig":"MEYCIQCjtk3ZrOH7NbNMK0r3td7z6uG832w6CyPPasDO3AK4lgIhAJpXdbiB1FeKJaqGN752sCcg/RrL4Ecn32ZVWuPHn33m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":578912},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"b407009f0c5a21128aeffa02cb54478f0fe97d73","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.11.0_1783671407792_0.3630693202018842","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.12.0","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.12.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"e2b508c54e1bbeebadcd990ae5e8a536d5bc0955","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.12.0.tgz","fileCount":12,"integrity":"sha512-xmITscFFa9xrmPcBhpdo1gvO2Vu/XLkvtaH4q7Fqld9K1YqknGAkL+oVIhFrogu4J9UlZsNVktOQn0RAxdb5ww==","signatures":[{"sig":"MEUCIQDr6nZjD+rrqyGQryyLWNSCKUvjJShWvhHjBu7WUpOs8wIgZ31/iPZViQFX/72/6U8lmX0lQ5aXLyUpa5PI1rnDGgs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":611890},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"00dae3af2a7d55205115a38359ac390a3210819b","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.12.0_1783697109108_0.11933613255192399","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.13.0","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.13.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"7486c8b6f121d50b23901566504334d87109ffd0","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.13.0.tgz","fileCount":12,"integrity":"sha512-AOm/2sqOxUcY6H9wko4x7oJqgtaeTFsVwPoIpYMg7Kpk3kTEi2WG71AmMCmDP+c0YtRXFn+PjIlQBT9jxJBxwQ==","signatures":[{"sig":"MEYCIQCPnZhx9IDwNX7RW/FTPe0yriKWmwtz48HMm3MvBt7mNAIhAIH/B15UaF/s55msOxhk/Lv65SBq8HdTL25wtRpCrkty","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":761287},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"c9d5d35ffa54bc74598546f54f549268c61f1251","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.13.0_1784877003855_0.3459828330619308","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.14.0","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.14.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"9d50b8ba0a611093799d834be33edb2ae3563f5e","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.14.0.tgz","fileCount":12,"integrity":"sha512-ChUdrzO96oFTYF5PWi4nkxVJ/QzooDXQ2G85cygyGqOWgBQJCj4F0JeQ9TVlb/h4re7VqQkXBdvoue6NHSXJmA==","signatures":[{"sig":"MEUCIDaKN/nVhz0IIxxr4YUZWoQ7Dh03gc9f+V6h9JuMmDuxAiEAsZHj5z2JeCCKdnacxIbhpC5pGTQ/I4krUyXc/szSD4M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":766960},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"9558381c626f282df62918d18d815eee60d6bfcd","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.14.0_1785050426311_0.14313062164508916","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.15.0","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.15.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"bbe799e21d330b860dee4f1da09b0cc76d2b9aae","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.15.0.tgz","fileCount":12,"integrity":"sha512-m4AXiKPSF3xZ/rgPgjkiZOLBt39jervdGtMBxBEHo2iYc6pnaAE5QQ2aikBgp4p2T2rMhc8kM6z54BIzTMqhOg==","signatures":[{"sig":"MEQCIG9uus2vQXUIHJukw4mJeo05L/nkbSPn/56tQPlz2yobAiAO8O23gZGlBJaouv2sUBVJuQLGdZGmdm4uDDDb9T3XNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":851029},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"558a136836f467bb0763dab74227f7eafd298f9b","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.15.0_1785671376805_0.8548680665924719","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.16.0","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.16.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"2d501d5732e738963b1f7d633f20aac76343edaf","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.16.0.tgz","fileCount":12,"integrity":"sha512-uSfBI85N+5JsUJf6hp/PJ69Z/gnotDj3zs7M4VwgNawKGKfPlmpM/IzU7H9c136TZ9eKAP6fUlwNHec7/6u4zg==","signatures":[{"sig":"MEYCIQCMnZsQInX1Juf/wtOEzAjMtBjJxkMvk8FYgbC6jspdNQIhAMGVQ27jsrulAvuMgx/cCW95lhd3m9qKVta7Jj8mXfDy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":871750},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"3836facae8db3f748dc12b4f79b2601ef39f17a8","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.16.0_1785847863261_0.26769342796749207","host":"s3://npm-registry-packages-npm-production"}},"1.16.1":{"name":"@yuvrajangadsingh/vibecheck","version":"1.16.1","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.16.1","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"5dc0bc8bd83c30b84c0b8ca06cdeac7110e0d3c8","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.16.1.tgz","fileCount":12,"integrity":"sha512-4U7H4nuHwM55WCeIo/1L+srVrH8cj3/+139iJhI/LgJqU6fxo+aEZUdNbsXrOqMliaegsMxgMS11+dyUc5E+ow==","signatures":[{"sig":"MEYCIQDGypfhC/1rNqKwxWXn/tBg2ae/dHZg53ABdMA6tVwONgIhANJdVMcJwLAjBekZ9AR1OcPyllIePVCEk2rWncj/d6Rw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":877614},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"211fc148e1171e7aee89fc3d6eabf592dddd0484","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.16.1_1785849854996_0.8832324099955609","host":"s3://npm-registry-packages-npm-production"}},"1.17.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.17.0","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.17.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"c628e8730cdba5feb692d1a4ea854c0bae121bfd","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.17.0.tgz","fileCount":12,"integrity":"sha512-G69Ak4gcRPKgXVDt/WnY1sxPtKdKXM+9tvfgbWCkvfWfrDqBuxbcuGq/N4hLvd4Z+NPFxcCuzt02/jEz2a/6aA==","signatures":[{"sig":"MEUCIHibthtQS4rS2cmJUusAotmHh4IqEoMweWNk7DpxzekJAiEAnqlCociylzToGZsSiPZOpnU0P4zHh457hAATxv3DMeY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":890574},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"ed07a53480fb2b4ccbc8c1054e9f3b99145cd457","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.17.0_1785909276446_0.1165966278176207","host":"s3://npm-registry-packages-npm-production"}},"1.17.1":{"name":"@yuvrajangadsingh/vibecheck","version":"1.17.1","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.17.1","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"3b7b91c7087ac735cbd76cdb07c5235217984b0b","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.17.1.tgz","fileCount":12,"integrity":"sha512-QzKnk0ZFOc2LGUc3U5Ka/edgU0nFu3sB7nItKlyzIJM3v8PwGtLHrTQ6KZLfqtXqzfRw70Jzw4+RknpIzoEqBg==","signatures":[{"sig":"MEUCIQCGwxsxwpwye5J7Ldhi5oaQ3uC04aP1SRh3VVJWqwNeqgIgDXXRAbPArYYdqK+WOawtVs53+O57qAb/gkJebzwbblQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":893052},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"57e5ec40d932ecc896eb47b0bdb3154532278bfd","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.17.1_1785922768945_0.731843316881873","host":"s3://npm-registry-packages-npm-production"}},"1.18.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.18.0","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.18.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"9e39a0ac961353d5d2a558ea5c457689a5ad22d7","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.18.0.tgz","fileCount":12,"integrity":"sha512-M7l+jAxmg+4WGwbf/gUAUbLiZoXe3WmTe+ORUm0Mg2VinyCv2VClPwJm7vyvfzDWjK5NoMMCtwZkbaPNPcKeRA==","signatures":[{"sig":"MEUCIQCVfNTECwFbjWikzCN1ul9Yt7o4nuqGkyU8hLBkO3E7ewIgc1MSgSYOlmDJ14WGyLXpkQ1lrTXM9aWX9XFq05ZwBE8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":904580},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"30d788f68f9b589c7ab85b510f9e8b3e4b773842","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.18.0_1785934581214_0.45078076337206197","host":"s3://npm-registry-packages-npm-production"}},"1.19.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.19.0","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.19.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"47cac307b39648b8b8fff44154a52d2659b6121a","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.19.0.tgz","fileCount":12,"integrity":"sha512-vuvUZwv3k78IZE+TNQa6Uyr7vTcADF2rdUhi9s0Jj76UEaBWgomAp2M7Ru9+XbNjlRBTlHqgmIC9DWD+mmM+VQ==","signatures":[{"sig":"MEYCIQDfuOanTv74cp8dT3xdoMR8++VmXvrYHaj4ixopMvCIBgIhAKwtyfstvCHyv7sfDghb6ghXfU32Pf4jHeZzw+qM67Ji","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":989719},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"d683fdff80ee465256f2060b5f8bedde179d3c6c","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picomatch":"^4.0.5","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2","@types/picomatch":"^4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.19.0_1785954025682_0.9099519541629084","host":"s3://npm-registry-packages-npm-production"}},"1.20.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.20.0","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.20.0","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"f7bffe869976f55bbdb2d7570931a916492a4c68","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.20.0.tgz","fileCount":12,"integrity":"sha512-IA5BAzarzscGqmRQGnzQfo7FYtT3dB+JkuXas5Tr5LoZJslYJVfJVHe1Quha6Vm/nw/GakPVdhAnx6y4moux5Q==","signatures":[{"sig":"MEQCIDVbD3Va/256UVMtCA09q0bDEoirxvBiAw5rC3V9EakvAiANx44HjM0XuCO3V3D+2qEM/EFHsxSfX3157Oau2bTl1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1039247},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"99019dd8fe284098463c3642cff0b1189f5bd2be","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picomatch":"^4.0.5","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2","@types/picomatch":"^4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.20.0_1786016216365_0.5041056445137253","host":"s3://npm-registry-packages-npm-production"}},"1.20.1":{"name":"@yuvrajangadsingh/vibecheck","version":"1.20.1","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"url":"https://yuvrajangadsingh.com","name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com"},"license":"FSL-1.1-Apache-2.0","_id":"@yuvrajangadsingh/vibecheck@1.20.1","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"dist":{"shasum":"f809931d57aef04ce2bac3f50c4830d30658fc6a","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.20.1.tgz","fileCount":12,"integrity":"sha512-cB3svvQEsf+fwZ+1gD/9VcMO7Vxl3ZNruOIRIQ8iQQ2ZGLPkDPLpbc3yJH+gYR1Dgt6asx/UD2rgNi+Ghr+/vg==","signatures":[{"sig":"MEYCIQCKXUznL3QYdYCBnf/GmTCpy9WY+jZaSHUyqRNtVsxIkQIhAPNXrtSFNkPNqQ28zEJGlviQVfsxEVFdgRcuX81Ohtvd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.20.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1040078},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"funding":"https://github.com/sponsors/yuvrajangadsingh","gitHead":"35bd28fb9e54c375e09073ba48b1ce780136d8e7","scripts":{"dev":"tsup --watch","lint":"node dist/cli.js .","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"repository":{"url":"git+https://github.com/yuvrajangadsingh/vibecheck.git","type":"git"},"_npmVersion":"11.16.0","description":"ESLint for AI slop. 39 rules for catching AI-generated code smells in JS/TS and Python.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","commander":"^13.0.0","fast-glob":"^3.3.3","picomatch":"^4.0.5","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^25.3.2","@types/picomatch":"^4.0.3"},"_npmOperationalInternal":{"tmp":"tmp/vibecheck_1.20.1_1786017582576_0.5630808314765887","host":"s3://npm-registry-packages-npm-production"}},"1.21.0":{"name":"@yuvrajangadsingh/vibecheck","version":"1.21.0","description":"ESLint for AI slop. 40 rules for catching AI-generated code smells in JS/TS and Python.","type":"module","bin":{"vibecheck":"dist/cli.js","vibecheck-mcp":"dist/mcp-bin.js"},"main":"./dist/index.js","scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","lint":"node dist/cli.js .","prepublishOnly":"npm run build"},"keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"author":{"name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com","url":"https://yuvrajangadsingh.com"},"license":"FSL-1.1-Apache-2.0","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/yuvrajangadsingh/vibecheck.git"},"homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"funding":"https://github.com/sponsors/yuvrajangadsingh","engines":{"node":">=18"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","commander":"^13.0.0","fast-glob":"^3.3.3","picocolors":"^1.1.1","picomatch":"^4.0.5","zod":"^4.3.6"},"devDependencies":{"@types/node":"^25.3.2","@types/picomatch":"^4.0.3","tsup":"^8.0.0","typescript":"^5.7.0","vitest":"^3.0.0"},"gitHead":"a83d856346a2e475b19ada432780fb6d8e4d6006","types":"./dist/index.d.ts","_id":"@yuvrajangadsingh/vibecheck@1.21.0","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-PMtNVejFl5yRUqvMIGTHczH2Bh6BX4AHZ7A2llTBG/M7QpSNwVYymcZlFmNw1FR2LOziFgfPs4O7kD0rdGdRDw==","shasum":"a465dc66380a6eb9231336bc824c5cf971a7904e","tarball":"https://registry.npmjs.org/@yuvrajangadsingh/vibecheck/-/vibecheck-1.21.0.tgz","fileCount":12,"unpackedSize":1108846,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@yuvrajangadsingh%2fvibecheck@1.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD2UDDJHGNyprWpf+2OAV9YISzoUjhzFJWYRubTA5wNMwIhANMVW9hPhkOCix3jzGbqrGxapuG65T5RH8Ulh0vGlObN"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:feb3dfc3-0983-4b32-bbf9-417aa3851391"}},"directories":{},"maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vibecheck_1.21.0_1788334383110_0.9232663332910849"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-26T21:32:51.066Z","modified":"2026-09-02T07:33:03.622Z","1.0.0":"2026-02-26T21:32:51.290Z","1.0.1":"2026-02-27T10:09:17.427Z","1.1.0":"2026-03-09T09:29:43.640Z","1.2.0":"2026-03-15T20:56:58.195Z","1.3.0":"2026-03-25T16:23:22.130Z","1.4.0":"2026-03-27T07:26:17.261Z","1.5.0":"2026-04-03T19:58:38.563Z","1.6.0":"2026-04-04T09:07:47.874Z","1.7.0":"2026-04-06T11:00:41.526Z","1.7.1":"2026-04-06T11:52:21.618Z","1.8.0":"2026-05-03T18:46:51.870Z","1.9.0":"2026-06-01T08:02:26.882Z","1.9.1":"2026-06-10T12:50:27.635Z","1.10.0":"2026-07-06T09:42:49.614Z","1.11.0":"2026-07-10T08:16:48.017Z","1.12.0":"2026-07-10T15:25:09.315Z","1.13.0":"2026-07-24T07:10:04.036Z","1.14.0":"2026-07-26T07:20:26.535Z","1.15.0":"2026-08-02T11:49:36.960Z","1.16.0":"2026-08-04T12:51:03.381Z","1.16.1":"2026-08-04T13:24:15.147Z","1.17.0":"2026-08-05T05:54:36.622Z","1.17.1":"2026-08-05T09:39:29.090Z","1.18.0":"2026-08-05T12:56:21.393Z","1.19.0":"2026-08-05T18:20:25.952Z","1.20.0":"2026-08-06T11:36:56.527Z","1.20.1":"2026-08-06T11:59:42.732Z","1.21.0":"2026-09-02T07:33:03.275Z"},"bugs":{"url":"https://github.com/yuvrajangadsingh/vibecheck/issues"},"author":{"name":"Yuvraj Angad Singh","email":"yuvrajangad.s@gmail.com","url":"https://yuvrajangadsingh.com"},"license":"FSL-1.1-Apache-2.0","homepage":"https://github.com/yuvrajangadsingh/vibecheck#readme","keywords":["linter","lint","eslint","static-analysis","code-review","ai","ai-generated-code","slop","ai-slop","vibe-coding","code-quality","security","typescript","javascript","python","copilot","cursor","cli","mcp","model-context-protocol"],"repository":{"type":"git","url":"git+https://github.com/yuvrajangadsingh/vibecheck.git"},"description":"ESLint for AI slop. 40 rules for catching AI-generated code smells in JS/TS and Python.","maintainers":[{"name":"yuvrajangadsingh","email":"yuvrajangad.s@gmail.com"}],"readme":"# vibecheck\n\n[![npm version](https://img.shields.io/npm/v/@yuvrajangadsingh/vibecheck)](https://www.npmjs.com/package/@yuvrajangadsingh/vibecheck) [![License: FSL](https://img.shields.io/badge/License-FSL--1.1-blue.svg)](https://fsl.software/) [![GitHub Action](https://img.shields.io/badge/GitHub_Action-marketplace-blue)](https://github.com/marketplace/actions/vibecheck-ai-slop)\n\n**40 rules for catching AI-generated code smells.** ESLint for AI slop.\n\n<img src=\"demo.gif\" alt=\"vibecheck demo\" width=\"700\">\n\n```bash\nnpx @yuvrajangadsingh/vibecheck .\n```\n\n```\n  src/api/routes.ts\n    12:5    error  no-hardcoded-secrets   Hardcoded secret detected. Use environment variables instead.\n    45:3    error  no-empty-catch         Empty catch block swallows errors silently.\n    89:1    warn   no-console-pollution   console.log left in production code.\n\n  src/utils/db.ts\n    34:5    warn   no-sql-concat          SQL query built with string concatenation.\n\n  4 problems (2 errors, 2 warnings)\n  2 files with issues out of 47 scanned (0.8s)\n```\n\n## Why\n\nAI coding tools generate code that *works* but cuts corners. Empty catch blocks, hardcoded secrets, `as any` everywhere, comments that restate the obvious. [CodeRabbit found](https://www.coderabbit.ai/blog/state-of-ai-vs-human-code-generation-report) AI-generated PRs have 1.7x more issues than human PRs. [Veracode reports](https://www.helpnetsecurity.com/2025/08/07/create-ai-code-security-risks/) 45% of AI code samples contain security vulnerabilities.\n\nvibecheck catches these patterns with zero config, zero API keys, zero cost. Runs locally, stays fast.\n\n## Install\n\n```bash\n# Run directly (no install)\nnpx @yuvrajangadsingh/vibecheck .\n\n# Install globally\nnpm install -g @yuvrajangadsingh/vibecheck\n\n# Standalone binary (no Node required)\ncurl -fsSL https://github.com/yuvrajangadsingh/vibecheck/releases/latest/download/vibecheck-darwin-arm64 -o vibecheck\nchmod +x vibecheck\n./vibecheck .\n```\n\nStandalone binaries (built with [Bun](https://bun.sh)) available for macOS (arm64, x64) and Linux (x64, arm64) on the [releases page](https://github.com/yuvrajangadsingh/vibecheck/releases). No Node.js or npm required. Python developers can use these to scan their codebases without installing Node.\n\n## What it catches\n\n### Security\n| Rule | Severity | What it detects |\n|------|----------|----------------|\n| `no-hardcoded-secrets` | error | API keys, tokens, passwords in source code |\n| `no-eval` | error | `eval()` and `new Function()` calls |\n| `no-sql-concat` | warn | SQL queries built with string concatenation |\n| `no-innerhtml` | warn | `innerHTML` and `dangerouslySetInnerHTML` usage |\n| `no-py-eval` | error | `eval()`, `exec()`, `os.system()`, `subprocess(shell=True)` |\n| `no-py-sql-concat` | warn | SQL queries built with f-strings or `.format()` |\n\n### Error Handling\n| Rule | Severity | What it detects |\n|------|----------|----------------|\n| `no-empty-catch` | error | Empty catch blocks that silently swallow errors |\n| `no-console-error-only` | warn | Catch blocks that only `console.error` without rethrowing |\n| `no-swallowed-promise` | warn | `.then()` chains without `.catch()` |\n| `no-vague-error` | warn | `throw new Error(\"Something went wrong\")` and vague `Promise.reject` |\n| `no-bare-except` | error | `except:` without specifying exception type |\n| `no-pass-except` | error | `except: pass` silently swallowing errors |\n| `no-py-log-swallow` | info | `except X:` handlers that only log and move on. An AI tell more than a bug: most are deliberate |\n\n### Code Quality\n| Rule | Severity | What it detects |\n|------|----------|----------------|\n| `no-console-pollution` | warn | `console.log`/`debug`/`info` left in production code |\n| `no-ai-todo` | info | AI-generated placeholder TODOs (`TODO: implement`, `FIXME: add`) |\n| `no-god-function` | warn | Functions over 80 lines |\n| `no-deep-nesting` | warn | Code nested 4+ levels deep instead of early returns |\n| `no-double-assertion` | warn | Chained assertions like `as unknown as T` bypassing TypeScript safety |\n| `no-ai-attribution` | warn | `// Generated by ChatGPT` style comments (auto-fixable with `--fix`) |\n| `no-star-import` | warn | `from module import *` namespace pollution |\n| `no-mutable-default` | warn | Mutable default arguments (`def foo(bar=[])`) |\n| `no-py-print` | warn | `print()` left in production code |\n\n### AI-Specific Tells\n| Rule | Severity | What it detects |\n|------|----------|----------------|\n| `no-obvious-comments` | info | Comments that restate code (`// initialize the counter`) |\n| `no-ts-any` | warn | TypeScript `any` types and `as any` casts |\n| `no-hedging-comments` | info | Uncertain comments (`// should work`, `// might not be the best approach`) |\n| `no-step-comments` | info | Numbered step comments (`// Step 1: Initialize`) |\n| `no-section-dividers` | info | ASCII section dividers (`// ========`) |\n| `no-narrator-comments` | info | `// This function handles...` narration comments |\n| `no-stub-function` | warn | Scaffolding shipped to production (`throw \"not implemented\"`) |\n| `no-hallucinated-import-js` | warn | Imports of packages that don't exist on npm (AI hallucinations) |\n| `no-hallucinated-import-py` | warn | Imports of packages that don't exist on PyPI (AI hallucinations) |\n| `no-py-obvious-comments` | info | Comments restating code (`# initialize the counter`) |\n| `no-py-stub-function` | warn | Stub functions raising `NotImplementedError` with no body |\n| `no-py-hedging-comments` | info | Hedging comments (`# should work`, `# might not be ideal`) |\n| `no-type-ignore-blanket` | warn | Blanket `# type: ignore` without specific error code |\n| `no-unused-protocol` | info | `Protocol` class defined but never referenced (AI ghost scaffold) |\n\n### Framework\n| Rule | Severity | What it detects |\n|------|----------|----------------|\n| `no-express-unhandled` | warn | Async Express routes without error handling |\n| `no-error-info-leak` | error | Error internals (`err.message`, `err.stack`) leaked to HTTP responses |\n| `no-flask-debug` | warn | Flask `app.run(debug=True)` in production |\n| `no-with-router` | warn | `withRouter` HOC, deprecated since react-router v6 |\n\n## Options\n\n```\nvibecheck [path] [options]\nvibecheck rules [--json]\n\nOptions:\n  -c, --config <file>     Path to config file\n  -d, --diff              Only scan lines changed in git diff (unstaged)\n  --staged                Only scan lines changed in git diff --cached (staged)\n  --diff-stdin            Only scan lines changed in a unified diff read from stdin\n  --fix                   Auto-remove fixable findings (AI attribution comments)\n  --format <format>       Output format: pretty, compact, json, quiet, gh, sarif (default: pretty)\n  --json                  Output as JSON (alias for --format json)\n  --ignore <patterns...>  Additional ignore patterns\n  --severity <level>      Minimum severity to report: error, warn, info (default: warn)\n  --fail-on <level>       Exit 1 at this severity: error, warn, info, never (default: error)\n  --max-warnings <n>      Exit 1 when more than n warnings are reported\n  --statistics            Append per-rule finding counts (pretty and json output)\n  --update-baseline       Record current findings in .vibecheck-baseline.json, then exit 0\n  --show-suppressed       List findings suppressed by inline directives (pretty and json)\n  --rule <spec>           Set one rule's severity for this run: 'rule-id: error|warn|info|off' (repeatable)\n  --no-defaults           Start with every rule off for this run; enable a subset with --rule\n  -q, --quiet             Only show summary (alias for --format quiet)\n  --mcp                   Start MCP server (stdio transport)\n  -v, --version           Show version\n  -h, --help              Show help\n```\n\n`--format compact` prints one `path:line:col  severity  rule  message` line per finding (cmd-clickable in most editors). `--format gh` emits [GitHub Actions workflow commands](#ci-without-the-action) so findings show up as PR annotations. `--format sarif` emits [SARIF 2.1.0](#sarif--github-code-scanning) for the GitHub Security tab.\n\n`vibecheck rules` lists every rule with its severity, category, languages, and whether `--fix` can fix it. `vibecheck rules --json` emits the same list as JSON.\n\n### One-off rule selection\n\n`--rule` changes a single rule for one run without touching `.vibecheckrc` — same `'rule-id: level'` shape the config file uses, repeatable, `off` disables:\n\n```bash\nvibecheck --rule 'no-deep-nesting: off' .                        # everything except one rule\nvibecheck --no-defaults --rule 'no-obvious-comments: warn' .     # exactly one rule\n```\n\n`--no-defaults` starts the run with every rule off (the config file's `rules` section is ignored too), so only rules enabled by `--rule` execute — the eslint-style opt-in model when you want it. Flag order doesn't matter; an unknown rule id or level is a usage error (exit 2) with a hint. Rules enabled at `info` still respect the `--severity` floor — add `--severity info` to see them.\n\n## Slop score\n\n```bash\nvibecheck --score .\n```\n\n```\n  slop score  68/100  (B)\n  16.5 weighted findings per 1k lines, over 360.2k lines\n\n    code-quality       12.1/KLOC   1042 findings\n    security            3.2/KLOC     47 findings\n    error-handling      1.2/KLOC     31 findings\n```\n\nOne number for how much AI residue a codebase carries, with the breakdown that\nexplains it. It never prints bare: a score with no categories is a vanity\nmetric, and the first question anyone asks is which part is bad.\n\n**Per-KLOC, severity-weighted, capped per rule.** An error counts 10, a warning\n3, an info 1. No single rule may contribute more than 20 points per KLOC — in a\n31-repo scan `no-deep-nesting` alone produced 46% of all findings, so without a\ncap the score would mostly measure nesting depth while claiming to measure\nslop. When the cap bites, the output says so and names the rule.\n\n**Grades are relative to real code, not to school.**\n\n| Grade | Score | Meaning |\n|-------|-------|---------|\n| A | 70+ | cleaner than every repo in the corpus |\n| B | 55-69 | better than the top quartile |\n| C | 40-54 | the interquartile range: typical |\n| D | 25-39 | below the corpus |\n| F | under 25 | far below |\n\nA 90=A scale would be wrong here, because the curve puts the median repo at\nexactly 50. The first version used one, and it graded five of the six\ncalibration repos an F and gave the cleanest of them a D. The bands are pinned\nto the corpus quartiles instead, so C means typical.\n\n**50 means typical.** The curve is `100 * exp(-density * ln2 / D50)`, where\n`D50` is the median density of a calibration corpus. Above 50 is cleaner than\nthe codebases measured, below is worse. Current calibration: **D50 = 30**,\nmedian of 6 repos (adk-python, codex, App, brandmd, gemini-cli, gitea) on ruleset 1.15.0, measured 2026-08-04. The full\nmanifest ships in [`src/calibration.json`](./src/calibration.json), and you can\nre-derive it yourself:\n\n```bash\nnpx tsx scripts/calibrate.ts <dir-of-repos> --write\n```\n\nThat reproducibility is the point. A hand-picked constant would make every\npublished score unfalsifiable.\n\n**The score describes the codebase, not your view of it.** It counts every\nfinding regardless of `--severity`, and counts baselined findings too, so\nchanging what you display never moves the number. Baselining is a decision to\ndefer slop, not to remove it — before this was enforced, writing a baseline\nsent the score straight to 100 with no code changed, and `--min-score` could be\npassed by running `--update-baseline`. Use `--fail-on` to gate on new findings;\nthat is what the baseline is for.\n\n### What diff mode can and cannot see\n\nDiff mode reports a finding when the line it is anchored to changed, **or when\nyour change introduced it**. The file is scanned as it was before the change\ntoo, so an edit that creates a problem is reported even when the line it is\nreported on did not move:\n\n```ts\n  } catch (err) {          // <- reported here\n    console.error(err);    // <- the only line you changed\n  }\n```\n\nThat also covers a function crossing the length threshold, whose declaration\nnever changed, and a build-time guard removed from above an untouched\n`console.log`. It deliberately does not resurface a finding that was already\nthere: editing one line inside a function that was already too long stays\nquiet, because that debt is not yours.\n\n`--staged` reads the **index**, not the working tree, so a file staged and then\nedited is checked as it will be committed. `--diff-stdin` verifies the piped\ndiff describes the files being scanned, using the blob hashes in its `index`\nheaders, and refuses to report against a checkout the diff does not match.\n\nA file the scanner cannot read is never reported as clean. Unreadable files,\nfiles over the 1MB cap, and staged blobs that are binary, symlinks or\nsubmodules exit 2 with the path named. Files you mean to skip belong in\n`ignore`, which stays silent.\n\nKnown limitations, all needing non-default git configuration:\n\n- A `.gitattributes` **clean filter** shifts `--diff` line numbers, because git\n  describes filtered content while the working tree holds the original.\n  `--staged` is unaffected.\n- A diff from **another repository** whose `index` hashes are shorter than 7\n  characters cannot be verified, and is scanned unverified.\n- Explicitly **naming a staged symlink** scans what it points at. A directory\n  scan refuses it.\n- A stream that **modifies then deletes** the same file is not refused the way\n  other multi-patch streams are.\n- A **deletion-only** change is invisible: only added lines enter the diff map,\n  so deleting a line that creates a finding reports nothing.\n- A staged move below git's **rename-similarity threshold** arrives as an add\n  plus a delete, so the destination reads as a new file.\n- When a file already contains an identical finding and gains another, the\n  copies cannot be told apart, so that group falls back to changed-line\n  matching and the new one may go unreported. A baseline can hide it for the\n  same reason.\n\n**Not available in diff mode.** `--score`, `--min-score` and `--badge` refuse to\nrun alongside `--diff`, `--staged` or `--diff-stdin`. The score is findings per\nKLOC of a whole codebase; in diff mode only changed lines are scanned and the\n1 KLOC floor then divides those findings by 1000, which reads as a codebase\nscore while being nothing of the sort. It also flatters: a commit adding an\n`eval()` scored 69 (B) in diff mode against 46 (C) for the same repo scanned\nwhole. Gate pull requests with `--fail-on` and `--max-warnings`, which are\ndesigned for changed lines, and gate the codebase with `--min-score`.\n\n### Gate a build on it\n\n```bash\nvibecheck --min-score 60 .\n```\n\nExits 1 below the threshold. Sits alongside `--fail-on` and `--max-warnings`\nrather than replacing them: those catch specific findings, this catches drift\nin the whole codebase.\n\n### Badge\n\n```bash\nvibecheck --badge slop.svg .\n```\n\nWrites a shields-style SVG you can commit and reference from your README:\n\n```markdown\n![slop score](./slop.svg)\n```\n\nvibecheck's own, regenerated on every release:\n\n![slop score](./slop.svg)\n\nThe SVG is self-contained. It renders no external images and calls no external\nservice, so adding the badge does not report your CI runs to anyone, and it\ncannot break because someone else's server is down. Combines with `--score` and\n`--min-score`; all three read the same computation, so the badge can never\ndisagree with the gate.\n\nMachine-readable form:\n\n```bash\nvibecheck --score --format json .\n```\n\nadds a `score` object to the JSON. Without `--score` the JSON is unchanged, so\nexisting consumers keep parsing what they always did.\n\n## Exit codes\n\n| Code | Meaning |\n|------|---------|\n| 0 | Clean, or no findings at or above `--fail-on` |\n| 1 | Findings at or above `--fail-on`, or `--max-warnings` exceeded |\n| 2 | Usage or runtime error (invalid flag, bad path) |\n\n`--fail-on` and `--max-warnings` count reported findings only: anything hidden by `--severity` never fails the run. With a [baseline](#baseline) present, both gates count new findings only. `--fail-on never` always exits 0 on a successful scan.\n\n## Auto-fix\n\n`--fix` removes findings that are safe to fix mechanically. Currently that's `no-ai-attribution`: full-line comments like `// Generated by ChatGPT` or `// Co-Authored-By: Claude` get deleted, code lines are never touched. A line is only removed when its content still matches what the scan saw, and results are re-scanned after fixing so reported line numbers stay accurate.\n\n```bash\n# Strip AI attribution comments across the repo\nvibecheck --fix .\n```\n\n## Diff mode\n\nScan only the lines you changed, not the entire codebase. Useful for pre-commit hooks and incremental CI.\n\n```bash\n# Scan unstaged changes\nvibecheck --diff .\n\n# Scan staged changes (pre-commit hook)\nvibecheck --staged .\n\n# Scan a diff from anywhere (PRs, other branches)\ngh pr diff 42 | vibecheck --diff-stdin .\n\n# CI-friendly output\nvibecheck --staged --json .\n```\n\nPaths inside a piped diff are treated as repo-root-relative (what `git diff` and `gh pr diff` emit) and resolved against the scan path, so scanning a subdirectory works. Outside a git repository they are taken relative to the scan path.\n\n### Pre-commit hook\n\nAdd to `.git/hooks/pre-commit` or use with [husky](https://github.com/typicode/husky):\n\n```bash\n#!/bin/sh\nnpx @yuvrajangadsingh/vibecheck --staged .\n```\n\n## Config\n\nCreate `.vibecheckrc` in your project root:\n\n```json\n{\n  \"rules\": {\n    \"no-console-pollution\": \"off\",\n    \"no-obvious-comments\": \"warn\",\n    \"no-ts-any\": \"error\"\n  },\n  \"ignore\": [\n    \"node_modules\",\n    \"dist\",\n    \"*.test.ts\"\n  ]\n}\n```\n\nAll rules are on by default at their recommended severity. Set any rule to `\"off\"` to disable it.\n\n## Inline suppressions\n\nSilence a finding where it happens instead of turning the rule off for the whole project:\n\n```ts\n// vibecheck-disable-next-line\nconst html = element.innerHTML;\n\n// vibecheck-disable-next-line no-eval, no-ts-any\nconst out = eval(expr) as any;\n\nconst legacy = eval(expr); // vibecheck-disable-line\n\n// vibecheck-disable no-console-pollution\n```\n\n```python\n# vibecheck-disable-next-line no-py-print\nprint(\"startup banner\")\n```\n\nA bare directive suppresses every rule on its target; add comma-separated rule ids to scope it. `vibecheck-disable` (optionally with rule ids) covers the whole file. Append `-- reason` to document why: `// vibecheck-disable-next-line no-eval -- sandboxed input`. The old undocumented `vibecheck-ignore` marker still works as an alias for `vibecheck-disable-line`.\n\nDirectives are parsed with a string-aware lexer, so directive text inside string literals, template literals, or regex literals never suppresses anything, and a directive must be the first token of its comment. Suppressions run inside the scanner, so the CLI, the GitHub Action, the MCP server, and the VS Code extension all honor them.\n\nIn JSX files (`.tsx`/`.jsx`) use the expression-comment form, same as eslint: `{/* vibecheck-disable-next-line no-eval */}`. Bare `//` and `/* */` directives are ignored there, because rendered element text could otherwise forge them. A file-level `// vibecheck-disable` still works before the first `<` in the file.\n\nSuppressed findings stay visible: the summary reports how many were suppressed, and `--show-suppressed` lists them (JSON output gets `suppressedCount`, plus the full list with the flag). Suppression abuse can't hide silently.\n\n## Baseline\n\nAdopting a linter on an existing codebase usually means a wall of findings. A baseline records them so only new ones fail:\n\n```bash\nvibecheck --update-baseline .   # record current findings (commit the file)\nvibecheck .                     # 76 findings (76 baselined, 0 new) -> exit 0\n```\n\n`--update-baseline` writes `.vibecheck-baseline.json` in the working directory (found automatically on later scans, like `.vibecheckrc`). Exit codes, `--fail-on`, and `--max-warnings` then count new findings only, and the summary shows `N findings (M baselined, K new)`.\n\nFingerprints are `sha1(rule|path|trimmed snippet)` with no line number, so baselined findings survive code moving around a file. Editing a flagged line changes its fingerprint and it comes back as new; re-run `--update-baseline` after intentional changes. All severities are recorded, so the baseline is independent of `--severity`. Run scans from the same directory you baselined from (fingerprints use scan-root-relative paths).\n\n## VS Code Extension\n\nGet inline diagnostics (squigglies) right in your editor:\n\n```\next install yuvrajangadsingh.vibecheck-linter\n```\n\nAvailable on the [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=yuvrajangadsingh.vibecheck-linter). Works in VS Code, Cursor, and Windsurf.\n\nFeatures: inline error/warning/info markers, Problems panel integration, status bar count, runs on save.\n\n## GitHub Action\n\nAdd vibecheck to your CI with inline PR annotations:\n\n```yaml\n- uses: yuvrajangadsingh/vibecheck@v1.13.0\n  with:\n    severity: warn       # minimum severity to report (default: warn)\n    fail-on: error       # fail the check at this severity (default: error)\n    ignore: \"tests/**\"   # comma-separated ignore patterns\n    sarif: false         # upload to the Security tab (see below)\n```\n\nThe action automatically scans only files changed in the PR. On push events, it scans the full repo.\n\nAvailable on the [GitHub Marketplace](https://github.com/marketplace/actions/vibecheck-ai-slop). See it in action on the [demo repo](https://github.com/yuvrajangadsingh/vibecheck-demo).\n\n### SARIF / GitHub code scanning\n\nSet `sarif: true` and findings land in the repo's Security tab next to CodeQL, with stable fingerprints so alerts track across commits:\n\n```yaml\npermissions:\n  security-events: write\nsteps:\n  - uses: actions/checkout@v4\n  - uses: yuvrajangadsingh/vibecheck@v1.13.0\n    with:\n      sarif: true\n```\n\nThe action writes `vibecheck.sarif` and uploads it via `github/codeql-action/upload-sarif` (uploaded even when `fail-on` fails the check, so the Security tab stays current).\n\n### CI without the Action\n\n`--format gh` emits GitHub Actions workflow commands, so findings show up as inline PR annotations from a plain run step:\n\n```yaml\n- run: npx @yuvrajangadsingh/vibecheck . --format gh --fail-on warn\n```\n\nOr upload SARIF to code scanning from a plain workflow:\n\n```yaml\n- run: npx @yuvrajangadsingh/vibecheck . --format sarif --fail-on never > vibecheck.sarif\n- uses: github/codeql-action/upload-sarif@v3\n  with:\n    sarif_file: vibecheck.sarif\n```\n\nOr keep machine-readable output for other pipelines:\n\n```bash\nnpx @yuvrajangadsingh/vibecheck . --json > vibecheck.json\n```\n\n## Pre-commit Hook\n\nAdd vibecheck to your [pre-commit](https://pre-commit.com/) config:\n\n```yaml\n# .pre-commit-config.yaml\nrepos:\n  - repo: https://github.com/yuvrajangadsingh/vibecheck\n    rev: v1.2.0\n    hooks:\n      - id: vibecheck\n```\n\n## MCP Server\n\nvibecheck ships with a built-in [MCP](https://modelcontextprotocol.io) server so AI coding agents can scan code for slop automatically.\n\n```bash\n# Start the MCP server\nvibecheck --mcp\n\n# Or use the dedicated binary\nvibecheck-mcp\n```\n\nAdd to your Claude Code, Cursor, or Windsurf config:\n\n```json\n{\n  \"mcpServers\": {\n    \"vibecheck\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@yuvrajangadsingh/vibecheck\", \"--mcp\"]\n    }\n  }\n}\n```\n\n3 tools available: `scan-files` (scan files/directories), `scan-diff` (scan a git diff), `get-rules` (list all rules).\n\n## How is this different from ESLint?\n\nESLint catches syntax and style issues. vibecheck catches patterns that are specifically common in AI-generated code.\n\n| | vibecheck | ESLint | sloppylint |\n|---|---|---|---|\n| AI-specific rules | 40 | 0 | 100+ |\n| Hedging comments | yes | no | yes |\n| Hallucinated imports | yes | no | yes |\n| Stub detection | yes | no | yes |\n| Section dividers | yes | no | no |\n| Step comments | yes | no | no |\n| Deep nesting | yes | plugin | no |\n| GitHub Action | yes | community | no |\n| MCP server | yes | no | no |\n| VS Code extension | yes | yes | no |\n| Zero config | yes | no | no |\n| Languages | JS/TS/Python | JS/TS | Python |\n\n## Real-world results\n\nScanned 31 repos built with Cursor, Bolt, Lovable, Replit, and v0:\n\n- **14,695 issues** across 3,597 files\n- **46%** of all issues were deep nesting\n- Cursor repos averaged 6.36 issues/file (highest)\n- Each tool leaves a different fingerprint\n\n[Full writeup with per-tool breakdowns](https://dev.to/yuvrajangadsingh/i-scanned-31-ai-built-repos-each-tool-leaves-behind-a-different-mess-4k3)\n\n## How it works\n\nvibecheck uses regex pattern matching to scan your JS/TS/Python files. No AST parsing, no external APIs, no AI. Each rule has a detection pattern and an anti-pattern to reduce false positives.\n\nIt skips `node_modules`, `dist`, `build`, `__pycache__`, `.venv`, lockfiles, and minified code by default.\n\nIf vibecheck saved you a review cycle, consider [starring the repo](https://github.com/yuvrajangadsingh/vibecheck).\n\nBuilt by [Yuvraj Angad Singh](https://yuvrajangadsingh.com). Also: [brandmd](https://github.com/yuvrajangadsingh/brandmd) (extract any site's design system for AI coding agents) and [vemb](https://github.com/yuvrajangadsingh/vemb) (embeddings from the command line). [Follow on GitHub](https://github.com/yuvrajangadsingh) for new dev-tool experiments.\n\n## License\n\n[FSL-1.1-Apache-2.0](LICENSE)\n","readmeFilename":"README.md"}