{"_id":"@alifurkangokce/driftlint","_rev":"12-5a1476f7be95973096d3ac3d967b83fe","name":"@alifurkangokce/driftlint","dist-tags":{"latest":"0.19.0"},"versions":{"0.1.1":{"name":"@alifurkangokce/driftlint","version":"0.1.1","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.1.1","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"3d5b6fb8e508d3ff06662fc2fb4a66b2773fae49","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.1.1.tgz","fileCount":13,"integrity":"sha512-H5MW5v/WwlPH/Bd2wC3iLmhg9SR52O+fBd8MTy7O0A1fg9W67DHgJwj5bRtcMALHYqgTHalmuHanAih5kStuhQ==","signatures":[{"sig":"MEYCIQD95a4pIabatnzTrI8uv67kMZ+6QKIlpM21vvUJ9zkUAAIhALCE7sOk6Esx/V69VELDhOu2tZG2pJDiNf7rt84uD2lS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31672},"type":"module","engines":{"node":">=20"},"gitHead":"28dcb0e698685cee64919bd204df2b0cd03539f3","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node dist/cli.js test/fixture --skill-budget 300 --json","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0"},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.1.1_1786450078390_0.896242793754368","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@alifurkangokce/driftlint","version":"0.4.0","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.4.0","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"8852664713f2d008a455b156c6b848d780a0e205","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.4.0.tgz","fileCount":17,"integrity":"sha512-mJnP23trqc1CKoenRAbXDma/idXKDUPuWyivmpXc2wCEMOWap+yIUEVMPIbaNOSkLUxVcG3e8EzMHq9+XA3kQw==","signatures":[{"sig":"MEQCIHKO1/1QSNO5PSZfh4IiKL070SYARJdLmwqLmWUpGijDAiBAuKHAH0+n+QUxgIVJm/9QH5f6Tgbl5D7XfuzAMn7Z3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57752},"type":"module","engines":{"node":">=20"},"gitHead":"9a1d61fcf54d7623819f0a7b02c246d30e3a8605","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node --test \"test/*.test.js\"","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.4.0_1786531802798_0.10308901941242987","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@alifurkangokce/driftlint","version":"0.9.0","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.9.0","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"9bdd72863222bc4c9bb09186017d020ed95270df","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.9.0.tgz","fileCount":47,"integrity":"sha512-iiROLGhABAn12+LrZyVwQi7kD3RTHfUHKZp2ePl4Kws83ZGndsVw+46QLLRynk/wQTP3qPy0NszYlbrX4wcUmw==","signatures":[{"sig":"MEUCIDPkVwdrcYY0gmAYe1VZfFKi8l5kHLgidMv7mzlZlExoAiEAqTam7VfSMxU6zr/SV0S21/I3UN6hAWfWVBXEnqEm3Fk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105285},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"0048f3df1fe773bc384a8830fac0fa4ba38b250a","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node --test \"test/*.test.js\"","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.9.0_1786953164919_0.08956640843732755","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@alifurkangokce/driftlint","version":"0.12.0","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.12.0","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"1ed6ad561b3e437f7f86f5e7f7c969629cd047d7","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.12.0.tgz","fileCount":57,"integrity":"sha512-ewn+wI8l5GDquBFynSK2lo/Jojt0nIn6ZkmPB0tOxZk/1zm1A1N2KDy4X03PGDN9fv5UqTQ9RI765LIUWVPwfA==","signatures":[{"sig":"MEQCIHQJWHnnErXAOKRbEQOeWRWvZVQgnI5Dvxg0FniFA16LAiBViBGPb/j6yAzLcEldIOzsjjkfUEpIF+6PcUP0v7JvhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141941},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"5249718f3557c6f38ece280389191c820cd983ca","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node --test \"test/*.test.js\"","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.12.0_1787641967212_0.11874156490832233","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@alifurkangokce/driftlint","version":"0.14.0","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.14.0","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"38ed5b162d3e3be786ae54c2e6cb2fb2d78ee736","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.14.0.tgz","fileCount":61,"integrity":"sha512-x86/DWa065ZHJcKFpBvxaiWfv0B6ycIiV88HIFo6ZdZepYwkvL9gpphcz5FfDdhnIls3AUChtG2hcgWG6vtk9w==","signatures":[{"sig":"MEUCIEE/uFgrBVwhlfPhf+EfynGbPtRgw3Cj8UzI6uQY/taDAiEA8YpXf1a8emTHmMlPWUMID5SgJl1GARsfETkTB1tup2k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGSryqhLFs+knUao9EL0mtvsS0a5sTfxt8Q+fDvpCWGVAiAii1AYbar+ioVYjFxHOHojmob1+yv/LtF2djmuAGBKKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160598},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"25fe5f89910b1a29b8138d918599a494f3feff13","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node --test \"test/*.test.js\"","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.14.0_1788332552126_0.7128904716657656","host":"s3://npm-registry-packages-npm-production"}},"0.14.1":{"name":"@alifurkangokce/driftlint","version":"0.14.1","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.14.1","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"3b52df9dcbdadd8cd74bb56174bac3bedab265a3","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.14.1.tgz","fileCount":61,"integrity":"sha512-e5/8UWG8YXL2QDH39tes498ocwIc4K5YFqswcXwCKLhJC9EkNKwjFv2PUkp24QCyBAQOPogLPDsh19aXvMghBw==","signatures":[{"sig":"MEUCIQCpyKrl88gMAneZSxXVhQr2+yyLousnf/VJ+BF/dzqPhwIgNTS8CVRrPoBYYCmG2JhonjvAYujqilpp5VrbPLTTeuM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD/BnDdnqVVo7E1efW4/mZ6070GH7y8b665hFiXs/AOzAIgQAFBromxecRaqg2Is3p3aJXsVHKcixg9GvDOG2oX3bE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161956},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"ccc97123a8c7ddc1c0e69253b070612461189a65","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node --test \"test/*.test.js\"","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.14.1_1788417066737_0.2411026459268586","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@alifurkangokce/driftlint","version":"0.15.0","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.15.0","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"f5a29d0400b875207ce9e681f5bc4fb13fd68b7b","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.15.0.tgz","fileCount":63,"integrity":"sha512-gJMz5c4ThKdPuXzfUHOasqi1u3QN3JLrsXKzYjj9en68ISwnly1S5hBHU7IeGQQtr5ttN/UiPWs9HDuPzgY1Sg==","signatures":[{"sig":"MEUCIEyflTShCffG6nJLFW8Q3092h8HoKPC3eJB2Z5GVqgoeAiEAhg5zLUKjO2pjbPeHJxzCqbZ+0QWRp0d0cSTbGC3OZrA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCeg+YsvMHiACQaXsgMU/ClE8eaMMuMUy6pTpwi48wGkgIgVfASxijKPuO63ZCevPqSKvmbJMi7KOd/2yMS56nvh3c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166696},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"ce3bd817f6f31cf17f03bf5521811489ec135ad4","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node --test \"test/*.test.js\"","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.15.0_1788504834655_0.12411729162583929","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"@alifurkangokce/driftlint","version":"0.15.1","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.15.1","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"d85b51fc87086f436193f31da832914622366bde","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.15.1.tgz","fileCount":63,"integrity":"sha512-OFmFF03GL5y44x1leXSSdXGUUVDTLYfP56ROD/OSipC5iDs4xqmXfBuRXMT6KLrk2H3MGCCF60YtZB8xs9GB9g==","signatures":[{"sig":"MEQCIGzSqGjkszbO3CKjDypCG+ZzQSvL2JPIp4KMqWPUuf1qAiA56YYCIVeQQ6ZTHmE51M8lPPZByfqPyYJGZx2RLDvIdw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDHioI9CsoM5EjObNH6ok9JD/Ke6bWmXt3oEDz+4CZKDwIgHfyi4OSfzUDb6r1bIzBOQvorgzS3BhKQB+cEi5B7ZCc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168619},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"38c805e57dbe856a40cdb933d55f7c7452dd0c20","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node --test \"test/*.test.js\"","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.15.1_1788515904255_0.3063025144089371","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@alifurkangokce/driftlint","version":"0.16.0","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.16.0","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"08c145d5743ef976332d03a22e9f1f8447b04b47","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.16.0.tgz","fileCount":63,"integrity":"sha512-lOn5bzQKf58zisO9XQ5T3YRW257G4zn2WClAPGTqfBrU//fDKZ5Ig35QpM7xMkLDlhQ59OJzxSwxwc8colWYcQ==","signatures":[{"sig":"MEYCIQDbztYrkYFycDHlj7Etlj+7dO4+x2QlzylC/31Is3OT+gIhALalW1JQNVbZbPgGNDkslujjte/OCeR4M6SPAGJFgzBj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCmM6rIOk6Qq2Mwe/qyU40Rq6epFKkrbZOsyFWMaVZJJgIgWDMbE5iCYylYYYL4v2syojYyoV7oYoeMrYsiRz7Di1U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173069},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"d4de18e218333967f068257a90eb195041b9475b","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node --test \"test/*.test.js\"","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.16.0_1788538277679_0.32348455852252433","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@alifurkangokce/driftlint","version":"0.17.0","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.17.0","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"4e36e7b4efe0a0fe0160ea7f04d4d7d3bf620dfc","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.17.0.tgz","fileCount":63,"integrity":"sha512-JZvn7o8y7Pym/enA/tdu6IsIOeEHH4hU/9cqz8+ZsD1k+oi8xzzScJj+h01duS85v+VcrJu3hjW9zt4IhvKOgg==","signatures":[{"sig":"MEUCIDs/HRcnftWP28y6YGFmK1raNXPkeh7J9vw7uxiNRmu/AiEAkXtjYgh8fcIcot4EZrt2pzuZOZBjC8ee7v/x3tRlJ0M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBgeTZ+tETuVZWjXZBWQmgwTbTMqvs3kBhGysURTLcDpAiEA66ox3a3/OuTAc6WQRcz/fEqKsxEdBj3vGZhT9wUsUZk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177317},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"6904ce3fec3dbd43974338ed8557ed681967afe8","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node --test \"test/*.test.js\"","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.17.0_1788976873689_0.12050235910004004","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@alifurkangokce/driftlint","version":"0.18.0","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"author":{"name":"alifurkangokce"},"license":"MIT","_id":"@alifurkangokce/driftlint@0.18.0","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"homepage":"https://github.com/alifurkangokce/driftlint#readme","bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"bin":{"driftlint":"dist/cli.js"},"dist":{"shasum":"df5bc28b9a0e18f8086a0f33486e5b30b6910703","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.18.0.tgz","fileCount":65,"integrity":"sha512-gP0+M6jpkCpVdY46oxyceVeMXK+ab94E5/idhX0KoJPvYwDsdIeGG4uAfFQxzCgr1Ysle9uSZiN8gDrMs9Ls6A==","signatures":[{"sig":"MEUCIQDMMM93GeFDvNtL8KDjUcS0iCGV0rWiiJUmSzOtiF/90AIgKA0RPrPcq+5k292yxqSoLHDT1gCipIP2pn7ojVvMIgM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCjN4ax+gRmgXY5lnrA53KT/rBMCl349jZmQrOhdKiotgIhAJJo0jev+Z9y+HRchtaCSi0OoSkpp5r/h0H7K7c6lUif","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":180982},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"f6484752602a9fbc467357d817623fc782885071","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node scripts/test.mjs","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/driftlint_0.18.0_1789136474515_0.8527125554783856","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"_id":"@alifurkangokce/driftlint@0.19.0","bin":{"driftlint":"dist/cli.js"},"bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"dist":{"shasum":"b075bffbd93ec30fc6f22b33009403a38491ff0d","tarball":"https://registry.npmjs.org/@alifurkangokce/driftlint/-/driftlint-0.19.0.tgz","fileCount":65,"integrity":"sha512-yKHfRGR8JyndT5RXqEE7TEUJXHENTE3dZSWxvgSaevS/lb27t8fYmf1JQ+nhMhg43lDeTJJVuP1fsHdsqpPkJQ==","signatures":[{"sig":"MEYCIQCvda1Mjz1Q+D1eaCmp/BFWJ2j8Vp5Vvs61Vgwt/QkpbQIhAKpXk4aY2Sv+0qZ2HTCOtHX2fOn3J4VaNuDx7FnmhELg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID8INX3UXpansa/vT5HqYf9NLM17sBWDwuMbdAjhO4FJAiAEzeLNDcANGIVRBiqETzbEbo0IMWedClDMGasOQrZDew=="}],"unpackedSize":184494},"main":"dist/index.js","name":"@alifurkangokce/driftlint","type":"module","types":"dist/index.d.ts","author":{"name":"alifurkangokce"},"engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"30089ed0e8198fc80e66e3590cada0a6b3e37949","license":"MIT","scripts":{"dev":"tsc -w -p tsconfig.json","test":"npm run build && node scripts/test.mjs","build":"tsc -p tsconfig.json","prepare":"tsc -p tsconfig.json"},"version":"0.19.0","_npmUser":{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"},"homepage":"https://github.com/alifurkangokce/driftlint#readme","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"_npmVersion":"11.14.1","description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","directories":{},"maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^20.14.0","@anthropic-ai/sdk":"^0.100.0"},"peerDependencies":{"@anthropic-ai/sdk":">=0.60.0"},"peerDependenciesMeta":{"@anthropic-ai/sdk":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/driftlint_0.19.0_1790086295801_0.15220315672555396"}}},"time":{"created":"2026-08-11T12:07:58.221Z","modified":"2026-09-22T14:11:36.088Z","0.1.1":"2026-08-11T12:07:58.532Z","0.4.0":"2026-08-12T10:50:02.944Z","0.9.0":"2026-08-17T07:52:45.075Z","0.12.0":"2026-08-25T07:12:47.369Z","0.14.0":"2026-09-02T07:02:32.212Z","0.14.1":"2026-09-03T06:31:06.816Z","0.15.0":"2026-09-04T06:53:54.744Z","0.15.1":"2026-09-04T09:58:24.339Z","0.16.0":"2026-09-04T16:11:17.757Z","0.17.0":"2026-09-09T18:01:13.811Z","0.18.0":"2026-09-11T14:21:14.610Z","0.19.0":"2026-09-22T14:11:35.883Z"},"bugs":{"url":"https://github.com/alifurkangokce/driftlint/issues"},"author":{"name":"alifurkangokce"},"license":"MIT","homepage":"https://github.com/alifurkangokce/driftlint#readme","keywords":["claude-code","claude-md","agents-md","agent-skills","lint","documentation","knowledge-decay","ai-agents","context-files"],"repository":{"url":"git+https://github.com/alifurkangokce/driftlint.git","type":"git"},"description":"Finds the claims in your CLAUDE.md / AGENTS.md / skills that your code no longer supports.","maintainers":[{"name":"alifurkangokce","email":"alifurkangokce@gmail.com"}],"readme":"# driftlint\n\n[![npm](https://img.shields.io/npm/v/%40alifurkangokce%2Fdriftlint)](https://www.npmjs.com/package/@alifurkangokce/driftlint) [![ci](https://github.com/alifurkangokce/driftlint/actions/workflows/ci.yml/badge.svg)](https://github.com/alifurkangokce/driftlint/actions/workflows/ci.yml) [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\n**Your CLAUDE.md is lying to your agent.** driftlint keeps agent context files true, two ways: a **drift linter** that finds the claims in `CLAUDE.md`, `AGENTS.md`, skills, subagents and cursor rules that your code no longer supports — and **Reviewed Memory**, the missing approval layer between what your agents learn and what your team ships into CLAUDE.md.\n\n```bash\nnpx @alifurkangokce/driftlint          # lint this repo\nnpx @alifurkangokce/driftlint twins    # keep CLAUDE.md and AGENTS.md in sync\n```\n\n![driftlint demo](docs/demo.gif)\n\nZero config. No API key. Zero runtime dependencies. Works on any repo.\n\n> **The two-file problem:** Claude Code reads CLAUDE.md; Codex, Cursor, Amp and 30+ other tools read AGENTS.md. Asking for both is [the most-upvoted request on the Claude Code tracker](https://github.com/anthropics/claude-code/issues/6235) — 5,200+ reactions, marked *not planned* — so teams keep two copies, and the copies drift silently. `driftlint twins --check` is the CI gate for that; the `twin-drift` rule catches pairs that already diverged.\n\n## Why\n\nCoding agents trust context files completely. But code moves and context files don't: the file you renamed in March is still \"the entry point\" in CLAUDE.md, the `deploy:prod` script you deleted is still the documented release path, and the skill you wrote last month is silently invisible because your skill descriptions overflowed the system-prompt budget.\n\nAgent knowledge decays like code documentation always has — except now the reader can't tell something is off. It just follows the instructions.\n\nThe research backs this up: an [ETH Zurich evaluation](https://arxiv.org/abs/2601.20404) measured that auto-generated context files *reduce* agent success while minimal human-written ones help — so the winning move is keeping the human-written file true, not generating a new one. And a 2026 study of 247k instruction lifetimes ([\"Why Does CLAUDE.md Keep Growing?\"](https://arxiv.org/abs/2608.11095)) found context files gain ~5 instructions per commit and almost never shrink, because once a rule's rationale is lost nobody dares delete it — which is why every Reviewed Memory entry carries its evidence and provenance.\n\n## Reviewed Memory (beta)\n\nAgents keep relearning the same repo facts, and pasting them into CLAUDE.md by hand doesn't scale to a team. Reviewed Memory closes the loop:\n\n```bash\ndriftlint memory propose --text \"Auth goes through the BFF.\" --evidence src/auth.ts:42   # the AGENT does this\ndriftlint memory review    # the HUMAN approves/rejects, one entry at a time\ndriftlint memory sync      # approved set → a marked block in CLAUDE.md / AGENTS.md / GEMINI.md\n```\n\nWhy it works: the synced block lives in the files **every agent CLI already reads** (no hooks, no daemon), git distributes it via ordinary PRs, and driftlint scans `.agent-memory/` and the block itself — so when the code moves, the memory that references it gets flagged like any other drift. Claude Code users get a `/memory-propose` command with the plugin. The propose → human-review → commit flow aligns with the governance channel of the [memorywire](https://arxiv.org/pdf/2606.01138) vendor-neutral memory wire format.\n\n### Auto-memory audit\n\nClaude Code also keeps its own [auto memory](https://code.claude.com/docs/en/memory) per project (`~/.claude/projects/<project>/memory/`) — and those memories decay exactly like context files, except they live *outside* the repo where no repo-scoped linter ever looks:\n\n```bash\ndriftlint memory audit        # finds the memory dir for the current repo automatically\n```\n\nIt verifies every memory against the repo it describes: **dead paths and removed commands** referenced in memories, **broken `[[wiki-links]]`** between memories (resolved via filenames *and* frontmatter `name:` slugs), and a **MEMORY.md past the 200-line / 25KB fold** — everything below it silently never loads into a session. Memories that record facts about *other* repos are recognized and collapsed into one info line instead of a flood.\n\n## Twins: CLAUDE.md ↔ AGENTS.md\n\nThe most-upvoted request on the Claude Code tracker — [support AGENTS.md, 5,200+ 👍](https://github.com/anthropics/claude-code/issues/6235) — is marked *not planned*. So teams using Claude Code next to Codex/Amp/Cursor keep **both** files, and the copies drift: someone fixes the test command in CLAUDE.md, AGENTS.md goes stale, and a week later half the team's agents follow the outdated copy. driftlint attacks this twice:\n\n```bash\ndriftlint                  # the twin-drift rule flags pairs that already diverged\ndriftlint twins            # mirror AGENTS.md into CLAUDE.md as a marked, idempotent block\ndriftlint twins --check    # CI mode: fail when the mirror is stale\n```\n\nThe `twin-drift` rule stays quiet for intentionally different files — it fires only on evidence: near-identical files with divergent lines, command claims that exist in one file but not the other, or a stale `driftlint twins` mirror. Pairs bridged with an `@AGENTS.md` import are recognized and skipped.\n\n## What it checks\n\n| Rule | What it catches |\n|---|---|\n| `dead-path` | Referenced files/dirs that no longer exist — with \"did you mean `src/util.ts`?\" hints when the file moved |\n| `dead-command` | `npm run` scripts and `make` targets that were removed or renamed |\n| `skill-budget` | Skill descriptions overflowing the ~15k-char system-prompt budget — skills past it are **silently invisible** to the agent |\n| `stale-knowledge` | Context files untouched for months while the code they describe churned heavily |\n| `foreign-context` | A file whose references mostly don't resolve — probably describes another repo; findings collapse into one warning instead of a flood |\n| `narrative-claim` | *(only with `--llm`)* Narrative claims (\"auth goes through the BFF\") that the code contradicts — verified with your own Anthropic API credentials |\n| `template-context` | Workflow files that describe a project this repo *generates* — collapsed into one warning instead of a flood |\n| `load-budget` | Content that silently never reaches the model: AGENTS.md past Codex's 32 KB truncation limit, files past the ~150-instruction adherence ceiling |\n| `missing-rationale` | Directive walls (never/always/must) with no stated reason — [the rules nobody dares delete](https://arxiv.org/abs/2608.11095) |\n| `twin-drift` | CLAUDE.md and AGENTS.md that carry the same instructions but diverged — differing command claims, drifted near-copies, stale `driftlint twins` mirrors |\n| `untracked-context` | Context files git doesn't track — your agent follows them, your teammates' agents never see them (`CLAUDE.local.md` is exempt by convention) |\n| `dead-link` | Markdown links whose target file moved, or whose `#anchor` heading was renamed — with the closest heading offered as a fix |\n| `silent-config` | Config in a shape or place the tool ignores: a plain `.md` under `.cursor/rules` (Cursor needs `.mdc`), a bare `.md` where a `<name>/SKILL.md` belongs |\n| `dead-config-ref` | Hooks, MCP servers, plugin manifests and skill `allowed-tools` pointing at scripts that don't exist — valid JSON, missing file |\n\n`dead-command` is workspace-aware: a script that exists in another monorepo package is reported as a *location* warning (\"defined in `packages/client/package.json`\"), not a dead command.\n\n## Config that never loads\n\nSchema validators check that your JSON is well-formed. driftlint checks whether the thing it points at is actually there — and whether the file will be read at all:\n\n- a hook whose script was moved (`$CLAUDE_PROJECT_DIR/.claude/hooks/guard.sh`) fails the first time it fires, silently\n- an MCP server whose local entry file is gone never starts (remote `npx`/`docker` servers are left alone)\n- a plugin manifest listing a command that isn't there installs fine and does nothing\n- a plain `.md` under `.cursor/rules` is [ignored by Cursor](https://cursor.com/docs/context/rules) — no error, no rule\n- a skill whose `description` + `when_to_use` runs past **1,536 characters** loses the tail: [that's where the skill listing truncates](https://code.claude.com/docs/en/skills)\n\nSkills are discovered wherever the [Agent Skills](https://agentskills.io) standard puts them — `.claude/skills/` and `.cursor/skills/` alike.\n\n## Usage\n\n```bash\nnpx @alifurkangokce/driftlint                 # scan the current repo\nnpx @alifurkangokce/driftlint path/to/repo    # scan another repo\nnpx @alifurkangokce/driftlint --fix           # interactively apply safe fixes (--yes: all)\nnpx @alifurkangokce/driftlint --json          # machine-readable output (CI-friendly)\nnpx @alifurkangokce/driftlint --sarif         # SARIF 2.1.0 for GitHub code scanning\nnpx @alifurkangokce/driftlint --no-fail       # report but always exit 0\nnpx @alifurkangokce/driftlint --diff          # only drift THIS change caused (vs origin/main)\n```\n\n`--diff` is what you want on pull requests: it scans the merge-base in a temporary worktree, reports only findings that are **new**, and attributes them to the change — *\"this PR renames `src/auth.ts` → `src/authn.ts`; CLAUDE.md still references the old path\"* — with the fix derived from the rename. Pre-existing drift stays out of your PR.\n\nInstalled globally (`npm i -g @alifurkangokce/driftlint`) the command is just `driftlint`.\n\nExit code is `1` when errors are found, so it drops straight into CI. Or use the action:\n\n```yaml\n# .github/workflows/driftlint.yml\non: [pull_request]\npermissions:\n  security-events: write   # only needed when sarif-file is set\njobs:\n  driftlint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n        with: { fetch-depth: 0 }   # full history enables the staleness check\n      - uses: alifurkangokce/driftlint@main\n        with:\n          diff: \"true\"                  # PRs: only report drift this PR caused\n          sarif-file: driftlint.sarif   # optional: findings become PR annotations\n```\n\nOr as a [pre-commit](https://pre-commit.com) hook:\n\n```yaml\nrepos:\n  - repo: https://github.com/alifurkangokce/driftlint\n    rev: v0.7.0\n    hooks:\n      - id: driftlint\n```\n\n### Optional LLM pass\n\nDeterministic checks can't see narrative claims. `--llm` extracts them from your context files, greps the repo for evidence, and asks Claude whether the code contradicts them:\n\n```bash\nnpm install @anthropic-ai/sdk        # optional peer dependency, only needed for --llm\nexport ANTHROPIC_API_KEY=sk-ant-...  # or `ant auth login`\nnpx @alifurkangokce/driftlint --llm\nnpx @alifurkangokce/driftlint --llm --llm-model claude-haiku-4-5   # budget option\n```\n\nYour key, your bill (default model `claude-opus-5`; capped at 10 files / 8 claims per file, token usage is printed). Findings are warnings marked *needs review* — the verifier is conservative: missing evidence is \"unverifiable\", never \"contradicted\". **Without `--llm`, driftlint never touches the network.**\n\n### reviewdog: one-click \"Apply suggestion\" on PRs\n\n```yaml\n      - run: npx -y @alifurkangokce/driftlint --rdjsonl --no-fail | reviewdog -f=rdjsonl -reporter=github-pr-review -filter-mode=nofilter\n```\n\n`--rdjsonl` emits reviewdog RDFormat where every did-you-mean fix becomes a committable GitHub suggestion. `-filter-mode=nofilter` matters: drift findings live on lines the diff never touched.\n\n### MCP server: agents lint their own context\n\n```bash\nclaude mcp add driftlint -- npx -y @alifurkangokce/driftlint-mcp\n```\n\nTwo tools from [`@alifurkangokce/driftlint-mcp`](mcp/): `drift_scan` (full report, optional `diff_range`) and `drift_check` — an agent about to edit CLAUDE.md verifies the reference **before** writing it, so it never writes a dead one.\n\n### Freshness badge\n\nEvery scan computes a deterministic **context-freshness score** (the share of path references that resolve; collapsed template/foreign files excluded). Put it in your README:\n\n```yaml\n      - uses: alifurkangokce/driftlint@main\n        with: { badge-json: badge.json, fail: \"false\" }\n      - uses: Schneegans/dynamic-badges-action@v1.7.0\n        with:\n          auth: ${{ secrets.GIST_SECRET }}\n          gistID: <your-gist-id>\n          filename: driftlint.json\n          contentFile: badge.json\n```\n\n```markdown\n![context freshness](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/<user>/<gist-id>/raw/driftlint.json)\n```\n\n### Adopting on a legacy repo\n\n```bash\nnpx @alifurkangokce/driftlint --update-baseline   # record today's findings\n```\n\nThis writes `.driftlint-baseline.json`; from then on only **new** drift is reported, so CI stays green while you pay down the backlog.\n\n### Config\n\nOptional `.driftlintrc.json` at the repo root:\n\n```json\n{\n  \"skillBudget\": 15000,\n  \"ignore\": [\"docs/archive/**\"],\n  \"templates\": [\".claude/skills/**\"],\n  \"rules\": { \"dead-command\": \"off\", \"stale-knowledge\": \"info\" }\n}\n```\n\n### Template repos (scaffolds, methodology kits)\n\nIf your repo *generates* other projects, its skills legitimately reference files that will exist in the **generated** project — driftlint would report those as dead. Three escapes: put a `driftlint-template` comment in the file, list globs under `\"templates\"` in `.driftlintrc.json` (both skip path/command checks with one info note), or let the auto-heuristic handle it — a skill/agent/command file with ≥2 unresolved references *and* generator vocabulary (\"scaffolds\", \"will create\", \"your project\") collapses into a single `template-context` warning. Root `CLAUDE.md`/`AGENTS.md` are **never** auto-suppressed: they describe *this* repo.\n\nSuppress a single false positive with a comment on the same line or the line above:\n\n```markdown\n<!-- driftlint-ignore -->\nThis mentions `hypothetical/example.ts` on purpose.\n```\n\n## Scanned files\n\nEverything an agent loads from the repo, nested directories included:\n\n| | |\n|---|---|\n| Root instructions | `CLAUDE.md`, `CLAUDE.local.md`, `AGENTS.md`, `AGENTS.override.md`, `GEMINI.md` — anywhere in the tree |\n| Rules | `.claude/rules/**/*.md`, `.cursor/rules/**/*.mdc`, `.codex/rules/**/*.rules`, `.clinerules` (file or directory), `.windsurfrules` |\n| Skills ([Agent Skills](https://agentskills.io)) | `.claude`, `.cursor`, `.codex`, `.gemini`, `.github` and `.agents` — all `skills/**/SKILL.md` |\n| Sub-agents & commands | `.claude/agents/**`, `.cursor/agents/**`, `.gemini/agents/**`, `.github/agents/*.agent.md`, `.claude/commands/**` |\n| Copilot | `.github/copilot-instructions.md`, `.github/instructions/**/*.instructions.md` |\n| Other | `.opencode/{agent,command,knowledge}/**`, `.agent-memory/**` |\n\nMachine-readable config is checked too (hooks, `.mcp.json`, plugin manifests) — see [Config that never loads](#config-that-never-loads).\n\n**User scope.** Codex and Claude Code also load an instruction file from your home directory, and it counts toward the same 32 KB budget as the repo's files. `--user-scope` folds `~/.codex/AGENTS.md` and `~/.claude/CLAUDE.md` into the total. It's off by default (CI has no such file, and reading someone's home directory during a repo lint should be a choice), and only the **size** is read — the content never enters a finding.\n\n## Claude Code plugin\n\ndriftlint also ships as a Claude Code plugin: a `/driftlint` command that runs the scan and then **fixes** the drift it finds (with your approval).\n\n```\n/plugin marketplace add alifurkangokce/driftlint\n/plugin install driftlint@driftlint\n```\n\n## How driftlint compares\n\n| | **driftlint** | agnix | reporails | ctxlint / agents-lint | claude-mem etc. |\n|---|---|---|---|---|---|\n| Referenced paths, scripts and links **verified against the tree** | ✅ | ❌ structural only | ❌ [documented as out of scope](https://github.com/reporails/cli) | ✅ | ❌ |\n| Hard vendor limits that truncate silently (Codex's concatenated 32 KB, the 1,536-char skill listing, `.cursor/rules/*.md` never loading) | ✅ | partial | ✅ per-agent caps, plus a 100 KB advisory aggregate (`CORE:E:0001`) | ❌ | ❌ |\n| Memory files | ✅ contents verified against the repo — dead refs, broken `[[links]]`, MEMORY.md past the load fold | ❌ | ✅ structure and size rules (`CORE:S:0023`) | ❌ | ❌ it *is* the memory store |\n| **Reviewed Memory workflow** (agent proposes → human approves → synced → re-verified) | ✅ | ❌ | ❌ | ❌ | ❌ auto-capture, no review |\n| CLAUDE.md ↔ AGENTS.md drift + a CI mirror gate | ✅ mechanical diff + `twins --check` | ❌ | partial — cross-agent conflict rules (`CORE:C:0026`, `CORE:C:0046`) | ❌ | ❌ |\n| Instruction surfaces covered | project scope, nested dirs | broad | broadest — project, user and system scope | narrow | — |\n| How well the instructions are *written* (clarity, structure, a 0–10 score) | ❌ by design | partial | ✅ 120+ rules | ❌ | ❌ |\n| Structural / spec conformance, LSP, IDE plugins | ❌ by design | ✅ 454 rules | partial | partial | ❌ |\n| Runs fully offline, no account | ✅ | ✅ | ❌ sign-in unlocks fix text and exact locations | ✅ | varies |\n| License | MIT | MIT | BUSL 1.1 (Apache 2.0 after 3 years) | MIT | varies |\n\nThe overlap is real and growing, so here is the honest split:\n\n- [agnix](https://github.com/agent-sh/agnix) checks that your files are **well-formed** — schema and spec conformance, with an LSP and IDE plugins.\n- [reporails](https://github.com/reporails/cli) checks how they are **written and organised** — clarity, structure, size ceilings, memory and rule surfaces across project, user and system scope.\n- driftlint checks whether they are **still true** — every path, script, link and config reference resolved against the actual tree, and a review workflow for the knowledge agents add.\n\nThe last one is the part nobody else claims: a file can be perfectly formed, well written, correctly sized, and still tell your agent to run a script someone deleted in March.\n\n## What it touches\n\nNo runtime dependencies, no install scripts, no telemetry, and no network call — except `--llm`, which is the one flag that sends your context files to the Anthropic API. `scan` writes nothing; `--fix` prompts per edit and only rewrites inside the scanned root. Full statement: [SECURITY.md](SECURITY.md).\n\n## Roadmap\n\nSee [ROADMAP.md](ROADMAP.md) — next up: an **optional LLM pass** for narrative claims, then **Reviewed Memory**: agents *propose* knowledge at session end, humans approve via PR, git distributes it, and driftlint keeps it honest.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}