{"_id":"vibehabit","_rev":"43-86a4ece1cae50fe67c75a23d598e738b","name":"vibehabit","dist-tags":{"latest":"0.23.1"},"versions":{"0.2.0":{"name":"vibehabit","version":"0.2.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.2.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"ccb344e18ae065290ebf53e9efdbb4e033f02282","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.2.0.tgz","fileCount":43,"integrity":"sha512-VpeypEk4LOEdQ5XWm7zF3SGtEugzNf3fJktkPFoTWnfQrm2rzCm5rIu+sGo5ZZAG4Gfyjn1RRB2XkP5RiCcY7g==","signatures":[{"sig":"MEUCIGMLEYAFK4DcSy3GOQmapkZfo/I7DDjAUpymtknY6sf4AiEAlwpij7wSZF6RqhhEm55uao0ILTGop1yo2DXxt02zi8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":131350},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"e351ce1f00efe4ff75c8259beb8dcf74f93414ab","scripts":{"test":"npm run build && node --test","build":"tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"node-pty":"^1.0.0","@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.2.0_1783597205658_0.32140370649768313","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"vibehabit","version":"0.3.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.3.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"c099410dd072ec5ab069ef5afb43aaa162b5770f","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.3.0.tgz","fileCount":45,"integrity":"sha512-67xueAcmBDiwvaOzQucp5Vb6YMMlut+l0ijOl4dn51kABNVDyTb23mcTuRchK7wZ8at5Rv5BKNrUf7LqxDE31Q==","signatures":[{"sig":"MEUCIHYxB+71qPxEIQZOXfyhRPctnS8XDrMDEU08qDhlnJY3AiEA2vfX+1Ue58ltpy5mp/qydZ5vXGEfTmZYZ8S3NJ6CClU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150800},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"f81e401b3c0a16e6e177537b80af3fa1c15d598d","scripts":{"test":"npm run build && node --test","build":"tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"node-pty":"^1.0.0","@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.3.0_1783599730687_0.10580794320857767","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"vibehabit","version":"0.3.1","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.3.1","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"32597a5ae5ad31a6fb7f7c4f62b74fa1338db74c","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.3.1.tgz","fileCount":47,"integrity":"sha512-9607aBqSsmYU2T6ZaSgoNZarWFJb15HT/HnAHDjdMhrAyW1p0pE8COA6Ojv9LFh1PMGJY6lLcbvnvLaARWzyTA==","signatures":[{"sig":"MEQCICk1IuAyYDXQf0ZTUh/WTNDol5EgvrIEHugblQI1o1zOAiBT6Y9AFvBfZpNVeoFbfGLz/ZTIacACV+vOyXPEDzCUgw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":170218},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"eeb5a65e746d4b335de59cd75a9f8b27c2a79c4e","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"11.12.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.3.1_1783635023300_0.3369929099482669","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"vibehabit","version":"0.4.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.4.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"043e321f6021e8904544f97c6c5a0d3905630024","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.4.0.tgz","fileCount":47,"integrity":"sha512-6b0EGWG1vQx617ORGQnHX5Jduj6GJVSK6lE69QQZF05tbz1q1lLiHyMurzaPj6MBZ/1oDHXHrqzdDiqBTe/r0g==","signatures":[{"sig":"MEYCIQDnBOKncObxkm5N2BeRwmVhU69phgv2iBNw+xOKXSPxAgIhAJOZphKTrKj88p4jZgdjmhLOyUXR/LHCMCmJOMNpMFve","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185352},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"04a528112a17f354c505ff82e57c6bf77bbc8f23","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"11.12.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.4.0_1783638947815_0.10356666066438525","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"vibehabit","version":"0.5.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.5.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"f5931f0b5a20cf3ebd90aabfede60dc2fb60817c","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.5.0.tgz","fileCount":47,"integrity":"sha512-T9rJPMyLht+fV3DDCRGJNp9uMaXBFmQrn5CA+nMVKvy8dH/0pFXhsUBkfwAeExQjXM7NXy9YjUNysWOlJIGxKQ==","signatures":[{"sig":"MEUCIQCKekQ7JEEhhT+LgHHCYFGNpaBcc02HHUBwfvuzC5QG/gIgZ8/7c+tWIitICOPgqLaDDdLHFUVdQHkES0b8LAeC3AY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192432},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"5c34dda1dacc28b6f81df04608dd9d468d50b7eb","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"11.12.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.5.0_1783640979584_0.862013578604907","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"vibehabit","version":"0.5.1","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.5.1","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"ca8ba4d3e982ce174e8ef2d796a1abdb70040c14","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.5.1.tgz","fileCount":47,"integrity":"sha512-c8wjPvLMR9K+pw5698/SkS4iVmP5jp8jl4uXTLQ+LnwwABsRmtkutYAG7wwra4rlhdJoUUx7NtH0c9/6B66GMA==","signatures":[{"sig":"MEQCIASp66TTVPro3vwEtnPHy5PsUZWmpr7BVMJtPMSH0fACAiAwY4zKocoESMhxGBluZuRWy8Jy0W1ZHj0K++QQZUmPWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":192717},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"7280cc7a91d5e69f8f2e1216149ddbfca19ce60e","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"node-pty":"^1.0.0","@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.5.1_1783673990898_0.23169867993181326","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"vibehabit","version":"0.6.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.6.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"2a4d6b74d71ed9680ac868b6bd126f52192a29ab","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.6.0.tgz","fileCount":49,"integrity":"sha512-e1E4DbFt0ossNUtNJBMz10DMlKuyQ4HHhFYwsWa1RzW0RSGMNrFWu6dT2XldM+jr/KQnNV1scP2tqAVxpg5o0w==","signatures":[{"sig":"MEQCIAlpXVggHFMade8BOWOl1D7Z+D12O9XGJgXBlZl5BDkzAiBW1ixYKTO4MR1kRpp58oHa05eUzxEo7PGwbJwUF6dxDw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206679},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"58e8209f584c203dbe466811a3c4ce38d9a463fb","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"node-pty":"^1.0.0","@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.6.0_1783682800121_0.7073078845409","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"vibehabit","version":"0.7.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.7.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"6d2afe3cd20b70739add4add5b2d62ea710b92be","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.7.0.tgz","fileCount":47,"integrity":"sha512-ZlOMwKJEt7How4pEaXGQEqf+Ym3MpU+ZxzPVHv/p/9aJEBPqeftqGBZDf3452lBjWG3wu/ma8CUUbypaUFWUDA==","signatures":[{"sig":"MEYCIQCi2HdufiYeu11svvh0q6W3tJcWUUbkIFRazRB72LGUagIhAL5H8jccc4OirRDxyN9FrlAmIhoj2zIqh4gNzrQ78M+K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202950},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"264ab5b643ad6326ebc51566085516aa8d580515","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.7.0_1783688542679_0.4065141805804351","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"vibehabit","version":"0.7.1","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.7.1","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"e98c988de537ebb7801925e43a3866f0fdf5486d","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.7.1.tgz","fileCount":47,"integrity":"sha512-95cvzo4FgCAbF8LC/OOkVSiAsSsKoWlpNRqxbrMT0Y9E6Dhys21+6NE7e9qIVzS1aMF4Ejp9XdJNgJXPyOetJA==","signatures":[{"sig":"MEUCIG+QWvgU/TkjPhPMp4qhDIswrrrufd0us1JO2rc0j+raAiEAmuRRTSrXhvLNhwQ4aARBe2w9nMD09esiK0QEzKPUgfA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204327},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"a562359d8bc32456b231cee8c643e68f78252def","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.7.1_1783689745204_0.20507578256198133","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"vibehabit","version":"0.8.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.8.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"bdad9bad48a66c64b71d589788f9d7ea5a83dd0a","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.8.0.tgz","fileCount":49,"integrity":"sha512-7w1tZQc8MCehYCWG3Qxh/N1psxJapaVmZsBBs6yPD6zHXUKACUPmAj0cSpAebPBsTapU+utMXJt7Bbme+V/CBQ==","signatures":[{"sig":"MEYCIQDoFL54NU8qLTA1Mx/jeJTaICYjJIcZqTOgtBfKPDdQKAIhALZH7Pc0xSzk4i/vt4xZ16Rkhm9Fctf+t/6UKlY67NGJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214815},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"5802350b86d80179da178111d0ecf04d2a6b6ea6","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.8.0_1783702212749_0.2056654309564252","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"vibehabit","version":"0.8.1","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.8.1","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"1bf274a0454b82afde1a6b7eb15ed3d631590706","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.8.1.tgz","fileCount":49,"integrity":"sha512-MeAJu19e2qSPZ0WRwFr+833EXSICxUxze1fbF4hHQGNiCwqGXgO1nAMbrZYGsyNQs96AjJ2+q9sZ2bkReCk+Yg==","signatures":[{"sig":"MEQCIGB7bG6uG6KXO03z+ZbSS+3FlxrdRKXIOvgdWQJ43pimAiAbJYvnxWhe3yL8iMbgPGyCCby2n64KgpDM/JLwbFUu5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":215015},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"ce8e4170fdfb456d3aac206de22f7b95f0321bfc","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.8.1_1783760328565_0.6114997478362616","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"vibehabit","version":"0.9.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.9.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"e4a25c17aa575d639feffec098e298ccf0d44121","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.9.0.tgz","fileCount":53,"integrity":"sha512-v/9KbbxbvzSBpWvC/+8PB7JERV5UP1zhJ2TuwbiOg9dFIHyLhUht0oqMablAvK8Y9ook8inC/2qlkJHKSIei8w==","signatures":[{"sig":"MEQCIEQXKjOocUp1k0vQyicmWpsyWoUbIORNp6nYPAVQxOmHAiA7LkiHcq0VC7Fss8c8zmiA0fjj+/0+P51QCtnKdonvIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":496559},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"0e290def2d502329ebd0925063d92f0eccb5e9a9","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.9.0_1783774876391_0.23325240109728873","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"vibehabit","version":"0.10.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.10.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"b152f63895f344168590149929cd09736f953a52","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.10.0.tgz","fileCount":55,"integrity":"sha512-KaX2f3iC/jtGRQ3JWkNE03cCmxBogc6nWI2t5PoNEDQaub5YQaOZB9qw4gMa7yZXdnWVitWAho06TwKYaiLMjQ==","signatures":[{"sig":"MEQCIEOLDIhWhmKevLspCrUU92MDZ0Eo+1gFrjS6CYgTwW9iAiBSucxBgsj5EgVXutlqoNuP+NNQsrHfMI0iZCDiblagCw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":511408},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"8710afbed74c732eb906497f4659a5f4f0867dd6","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.10.0_1783781774938_0.004121905846625529","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"vibehabit","version":"0.11.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.11.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"e93a6820580592db09868098723633f68a33f3ec","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.11.0.tgz","fileCount":57,"integrity":"sha512-VsPYXBTIFLTsVrW6oq0nRZWx3uwBSo0o9P4gXd3xLpxqCS33e5IQMBFU9vP0zm6yhFCU44pa7KdCORwrl+4K3Q==","signatures":[{"sig":"MEUCIEti9ZSLrw8iiSl0cnb0T29vcj+dr8ho/WaJ8T4Pmu3YAiEA+UXvI1lrSBNH0Nt98X/AvNxFt5qWx8rCNuFyCdIlKNs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1086474},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"18126052141b814f15dd2d585dff010c40d788bc","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.11.0_1783955365560_0.17154267394848532","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"vibehabit","version":"0.12.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.12.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"aee9d0db6f1e5543a80aa5caac5455709fdd4e99","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.12.0.tgz","fileCount":63,"integrity":"sha512-wzXMCFoWzbkOBYgtvqAYepIgZd3CmdclZ3egbTcobkg+oND6EQRMC7euZ2y4rVtkbCm9M9MaTCiXih/kP2+XoQ==","signatures":[{"sig":"MEQCIB3V9prB/Zo3uu7BkIVH8IBKFE8MEQgq6TDcDNmTB0XWAiB8I6IJQsJQr7xGBz5W5npoGnJ6QqGX1gUEA1QIOLuZ/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1112280},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"8e20cf59a9905cc590ce03fa151c850b7a837e05","scripts":{"lint":"biome lint .","test":"npm run build && node --test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"deprecated":"Superseded by 0.13.0 — please upgrade.","repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.12.0_1783963642812_0.009497755277096953","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"vibehabit","version":"0.13.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.13.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"d45209172aa418e2738f5411d9b4f88e540ad1e3","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.13.0.tgz","fileCount":59,"integrity":"sha512-Ec5MQs3XbXe/rqfK9g4QX9kiadr8Rz3gTD7m1B++gt60Jzab76a7eSlBvRI6CiXAgsSHDrYnVXFxlcyR6G1rFA==","signatures":[{"sig":"MEUCIQDvVxqWtexC5P8dLITjMroBICIxcPR0RFWSHpiS8VgmIgIgfpFfm+/3L6+oe+dBqC2pKlaz4NgK/ZIDbbjuydXN7FI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1092820},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"14622e65a0a9bc54ac11f342b508b74bdd5bd7b2","scripts":{"lint":"biome lint .","test":"npm run build && node --test test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.13.0_1783970202791_0.03173844156032124","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"vibehabit","version":"0.13.1","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.13.1","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"5beed8387777a0b735f4daa5916a52790569939b","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.13.1.tgz","fileCount":30,"integrity":"sha512-6dqUoITNZjdcWUmVmpU44oH2dj/KAMi3s8R6g4u0XVx203R++94w2lYPRJckwXsGuI2CgHemU1XFIejyV5iYtA==","signatures":[{"sig":"MEUCIQCaFzOLiF0olFf7QuHzha9cUWGT2nFKy814IAibKFZoVQIgfMSQDXcRlIDxxIr/aELI3g66tAaKhdBZaqT7gt2nHbY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":913063},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"33e3b2d278faf8f857583e30179a3e58b2993b8b","scripts":{"lint":"biome lint .","test":"npm run build && node --test test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.13.1_1783972959905_0.9278648939198717","host":"s3://npm-registry-packages-npm-production"}},"0.13.2":{"name":"vibehabit","version":"0.13.2","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.13.2","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"e1964030cc50ca3341ead7aaf3bc2e4c793bd8d7","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.13.2.tgz","fileCount":30,"integrity":"sha512-OWmCypM/H5VkZEFwBfNe0sGjwiPJ6UTsfkNtJlOD32+UvIGerulHxtzc7Q5mqKXitwYRqxfeiKf3t+0/EJ3eWQ==","signatures":[{"sig":"MEYCIQDg2teUb9gZAY4ka5pkYA3iqsCLS4jYzRKNgkP085+XDAIhAMHukWjiXIxvyVMtm4wc9O/1hsNgtdFQWj0NZD5EYiOw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":913942},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"05af547a78808633e0bda2ec1664e1c7993206fa","scripts":{"lint":"biome lint .","test":"npm run build && node --test test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.13.2_1783973486702_0.8238711838899166","host":"s3://npm-registry-packages-npm-production"}},"0.13.3":{"name":"vibehabit","version":"0.13.3","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.13.3","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"60efae6be3127c544b798be1ac5d731b3c9b0a16","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.13.3.tgz","fileCount":30,"integrity":"sha512-i8MVlJpyNzPNcFCwMYJE8yerW7tgXtvyi8qeYBZQtQ14J4/HjpFyLx+TNS40VD7UD9zeP1skZQ48qO733wIFBg==","signatures":[{"sig":"MEQCIAXxeaWCQb9KJD6vtvab5R+D/LYEmFVvRs9VMVD8Bw+PAiBwgdpL48TETRavHWu7U/q7IiZhKrlSOwSQjcv1btx/sQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":914261},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"e2fba11db44ca0e7e6ca98c98dd2e4c75bd06204","scripts":{"lint":"biome lint .","test":"npm run build && node --test test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.13.3_1783974435816_0.321495689229889","host":"s3://npm-registry-packages-npm-production"}},"0.13.4":{"name":"vibehabit","version":"0.13.4","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.13.4","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"d1f143c55f83134992ac47d1bd24b0c366a28411","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.13.4.tgz","fileCount":30,"integrity":"sha512-ftVImQ3YMhFt10uxws+zQxHXAcJO6psl4OdcTUDyrGlA8zAkHO8YAULnk6PioFfJf8utuerZOea2sY1JJcGiQQ==","signatures":[{"sig":"MEQCICd7PpLNUWfr4jytNCGTZHq5jZjmvJ9qrHURSztagtAvAiA3nuJA3cjDHxqFA0Xij4JbEWsGgFmzIDUhExVmzXw88Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":915841},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"28fdaddaf8540067ef65ae03ccd88465dcb378b5","scripts":{"lint":"biome lint .","test":"npm run build && node --test test","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.13.4_1783977967351_0.059087354072750786","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"vibehabit","version":"0.14.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.14.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"e105b952733a8af71d941b00b90fc1d5e6b31569","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.14.0.tgz","fileCount":33,"integrity":"sha512-NHZFsWUkWOQflmW6EtY030vED7/aBQV3bnHZELgNQ1ptmUutcY3gSRf6Uz1ZsKGTjFzjhHCMAI8kxIaLIVYXLg==","signatures":[{"sig":"MEQCIDx+f8u3wLOrVAOLg1ZBlYT2NbxWw5Bi7GeQx2Lt1uAIAiAjuBVrmotwm1CQ1VoC7tYGOhPax0VtmF9bz2W6Nchmrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1035215},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"71201313f63720ba52253ac4de9f28bf840ea081","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.14.0_1784279593225_0.8311770280248509","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"vibehabit","version":"0.15.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.15.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"a921e274666bc7bbcc1a3f531aa23138ba0a0644","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.15.0.tgz","fileCount":33,"integrity":"sha512-UHgd7ZJngc1P9LQHd1BtKSuUOyoPL9wleVx96YHK4o5CzbIaLAIdveTFDXTEvE9TBMmm8BjdCEemGAs61SMEXg==","signatures":[{"sig":"MEUCIE824BdrW5G3F5WyhAw0YMTLobMl3oiKcWM7sljt2zHhAiEAyR4mCXnBMs/WVLJFvgX/tpwtsYEpUdvQF7fMquy+diU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1065932},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"e0a98800518603231f0f541d0e684457d6042ccc","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.15.0_1784301189937_0.520283740637645","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"vibehabit","version":"0.15.1","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.15.1","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"e3969c83ed247808d6a7b780ffd9e2712e54a3e9","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.15.1.tgz","fileCount":33,"integrity":"sha512-D6eHNGBExVyz5c03ZvXEqHOuy1JT1FpkqTR4stIoHeT1hmSSvUUjg5nXVliKbVEApProdoJo118KKswFM7+p2A==","signatures":[{"sig":"MEUCIFDUII8mtNGFT9imheev6jS+LQyPfrLTekrXTuiAMiKVAiEA+Idm2mKLK7DYTOM+rCVORANYithbtE54dGy8OIE+WYA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1066260},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"07456443cf948e32ce9e41355dae1b36ceee4329","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.15.1_1784303701816_0.5786268388426299","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"vibehabit","version":"0.16.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.16.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"aae5296d3516bf60c5b309640bdbeab4c652e15d","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.16.0.tgz","fileCount":34,"integrity":"sha512-5GwiTK2zUBmyq/ITj1wHQ66jOCWUF9THuPBVgyx1V6t927hqex9JS3zke8UrI0dZ+JKEQV6aF46WDmYtY6G2EA==","signatures":[{"sig":"MEUCIQCWT5Fa5TPSqTnejzPE5a21hc1BOhZ0A+S5jMzUoC+fOQIgL70Uw1Hpq9sd3s5G9eyaj6a4kRmIaWVtX0OhOPJLJ/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1083924},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"ae531ece34f033af22347703b87ba5fd4a1599a2","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"11.12.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.16.0_1784377963452_0.6314205348414668","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"vibehabit","version":"0.16.1","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.16.1","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"4d868151020ec478b5e794034a984c139dde8125","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.16.1.tgz","fileCount":34,"integrity":"sha512-NA46N5e6h34E5OX5Bz+SbzpKboCCjTzILhxVHJ7d8OoCaVt1PiZOHHt90rQjwqg360h+fvFNeAFAEOP5X6A+sg==","signatures":[{"sig":"MEUCIQDu9095zPostYdX3OkrAyJhstUJtXST8Ol2KItuVPU46gIgROtlgINSZLIQBXQfkgb7+GesUxxCGdn6JD/ZbytYQwY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1084292},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"d5e4a056fa6650dfd552ac9551f782603be6e7c4","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"11.12.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.16.1_1784379610691_0.34846495832891455","host":"s3://npm-registry-packages-npm-production"}},"0.16.2":{"name":"vibehabit","version":"0.16.2","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.16.2","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"94b39f0121b50a77293c7b060f588c711406d2a7","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.16.2.tgz","fileCount":34,"integrity":"sha512-TadUvnjKVD8yLt/pYyumMnQ5QKSEqQd0oaBQJyNv5EGpZT7ngNx0YC8pETIva3ITYxfshDVwjOZTQ/WQcaEZvQ==","signatures":[{"sig":"MEUCIQCalGNr18yojeAkUJNGIz9YQuVUmJ9n4DDqErfkQPeaTAIgL2ONFkW/WZAjH5HWkNAXRRRwF3sWBkVLa7555HhIaaI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1086005},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"c1970294f94c1fde40ebf3c1aafd969e12323c4a","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.16.2_1784546768621_0.5032044166262979","host":"s3://npm-registry-packages-npm-production"}},"0.16.3":{"name":"vibehabit","version":"0.16.3","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.16.3","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"31782a66c8a5ec149d558e7e059a6f7d4887dffc","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.16.3.tgz","fileCount":35,"integrity":"sha512-96pGV7DnmG5tNbBltWsSpexW9NyhUuwwEaBQkaC2b7HkNl4/VCdp9q6zgd3LS5DVMQbVDN9cyKL/kzMOgzRiGA==","signatures":[{"sig":"MEQCIA7mMoggez6qs0fwutCCrEvRIEK8qkBS2tKsMRvW5XD7AiAXYI+uZEfMhbcqiKUkDEI8WcttyL2c4EJX4ec66hLRbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1093799},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"918287eb8e772cace0b999480ecac1910ab13db1","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"11.12.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.16.3_1784671677465_0.14105692522746094","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"vibehabit","version":"0.17.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.17.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"3558c3de28f0acc919a51eba4423387489e19b1a","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.17.0.tgz","fileCount":35,"integrity":"sha512-ieQEKvQ3a+aWPKFRCMNMlgl9gyzmLDhUrExoetL9OSZbLm5JAsjQHqigj0ckOQ652+9qEEtDHPnrDEnicbiAfw==","signatures":[{"sig":"MEUCIAjwzcA11hI+hkMZPZG004WtmbHcRKYOHdaQFxoRDy1PAiEAmtMDaW02OlBBR8IVeQl1+MvVPMFns5Vn7hoZ26mz5XU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1134731},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"035b67ff6c1513d140c254ec7355ab4f29a1223e","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.17.0_1784716529050_0.5063669731624123","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"vibehabit","version":"0.18.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.18.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"0b61e87daa80ae34b819f01be695488d6b1c732e","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.18.0.tgz","fileCount":35,"integrity":"sha512-LnAi/tab20E6allPV2FyTphQtbB30gYi6H3YCx/t+gg/TsOCfLXiK6riz1baY7BP/t90gvdGsEFRJXu7H07+Gw==","signatures":[{"sig":"MEUCIQDsEamkRzT+3JgPcj6Gvh8hU7pNn5XDXQha9lQg6dvt/QIgLIVhsgLF8cWtdcL0Dp+JapslbmUke682d11cYaBZD0o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1145204},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"05c0cf94a760d3b64584abd821ce897663d15de6","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.18.0_1784814423988_0.5561654021626483","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"vibehabit","version":"0.19.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.19.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/joeaspence/vibehabit/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"a20baabcc701c7429d8e2f2f3a4a87b241c67f77","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.19.0.tgz","fileCount":35,"integrity":"sha512-ljMwuzyZEUaWe/7Ani29D56gtjbyp5i9iFMwXZhiV7q/h/wbMICfJJuhp08WzH34ccBMV54f0wPE1XGzcblEWg==","signatures":[{"sig":"MEYCIQDvDk4yBWsOkp38nQgjfOhIgArskEhy8oUM+HAvyiyG9wIhAKIymdr4AxG9fCG9/T1ffa7FRAsMhByz2KvobZDaESKt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1143346},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"1710844b6bf02f0dda1dbf76d9822498425f044f","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.19.0_1784816874248_0.35337957278313703","host":"s3://npm-registry-packages-npm-production"}},"0.19.1":{"name":"vibehabit","version":"0.19.1","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.19.1","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"fea7f207e827af1a8a801f5d0d35320d9e7cb516","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.19.1.tgz","fileCount":35,"integrity":"sha512-ow+STBpy2uFkLytQaJBYimH4Ln6Kyvrm5qV1djXxbxEXaSm0Wv9e5hpSbQ8wURvlJ0vJcrCzKptKT7wm8lSlQA==","signatures":[{"sig":"MEUCIBhgKH3XvnOKpGTf4s5oAX+qmJfigfcwRlexBWfbElzMAiEAh7q9YXXz/+gC6FOuaV5sZayAKaJXyTKV5Ni8wItXDwo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1143334},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"8d65a51ccbfe009ecccac952f3844ba16e5fa98a","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"git+https://github.com/joeaspence/vibehabit.git","type":"git"},"_npmVersion":"11.12.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.19.1_1784846254173_0.9839519143950362","host":"s3://npm-registry-packages-npm-production"}},"0.19.2":{"name":"vibehabit","version":"0.19.2","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.19.2","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"c90cdbce1f447669108c8249775db886cea9be40","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.19.2.tgz","fileCount":35,"integrity":"sha512-0dIgwt4j0bWhrxypCvokIUs3EWwkbF99qSf6gKI1ybxVSvaoFSRCpl/0l7eLdErUvAvDE9Sf90Es/W3KgqmODQ==","signatures":[{"sig":"MEYCIQDozFxzpDl6r3w4Q0jhs+hX1z3Q+wDLfAO0eJHrI3hHHwIhAKBetfRx7R1BTDajpYEqX3wBAfrYE1T6A5ibtDfErvLF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1143703},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"ec6625aad6bb16a1ae16b53fb05336c2fef502c2","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"https://vibehabit.io","type":"git"},"_npmVersion":"11.12.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.19.2_1784928226316_0.6549361615154246","host":"s3://npm-registry-packages-npm-production"}},"0.19.3":{"name":"vibehabit","version":"0.19.3","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.19.3","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"ba76ed78427c132e3650ce95cb02eefc47bd9a38","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.19.3.tgz","fileCount":35,"integrity":"sha512-/rNKwYcyrZUiUVEjXNEwfMDHjol7Q1TnRpjKog5hlUVhELxCS2dKobJjB+shFy14QR8euILivk6A8AUZJwEGYQ==","signatures":[{"sig":"MEUCIQDJckQ8OykSy45vzF8A9fnbiKn2rjWJ1TzObJLSwkbT6AIgG0Ke67TkNHdRvxmClBfkYIa+IpmGB+1ytIyARcT+zOU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1143755},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"9cf37cd9583414817872a5697219a9f58499d2e2","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"https://vibehabit.io","type":"git"},"_npmVersion":"11.12.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.19.3_1784930017677_0.8738201529558824","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"vibehabit","version":"0.20.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.20.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"2a5d5e05ac3528d419b474d2a73eb070aca77dbc","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.20.0.tgz","fileCount":35,"integrity":"sha512-2yxqjxQia5faSojfbXVQlgWS8wkVk9855rqCt72XSGL4o2aAFPEFoomkPiAfVNz8Jv3xKkiMtQjOodddJsDZ3A==","signatures":[{"sig":"MEUCIAKfcW3PS6ZSieKeS4XI0YdZK83zA7XTKnyKt1wppmyFAiEAg6mb7YLdeoFeR0IenZemmzUqyVYrHeap8bV5fImln+I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1159518},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"54759296fcccc77514935861a7953f8a18d24a3f","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"https://vibehabit.io","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.20.0_1785146764935_0.7050363852562431","host":"s3://npm-registry-packages-npm-production"}},"0.20.1":{"name":"vibehabit","version":"0.20.1","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.20.1","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"b41ff0d2a6f6abae606d4a31d20f3769393b2bc1","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.20.1.tgz","fileCount":35,"integrity":"sha512-/lyvdWhrWtPkP9gEoMP336hkjliaRm+JiGVEsa8nvkCgqouGDjNXhWd6hhWcEqrhxBDqR+plH7sJOltapTDetQ==","signatures":[{"sig":"MEQCIHL4X9F9M6O/QHLiBuya02LIDWEomMl9P8BqAYEfrgyBAiADnxsMwxd48topW1pDmF8tBjUdCYRuWLoT+9KwXsug9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1166032},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"1c59b36790e6cd24f8706fc95fe9fc01cd56f397","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"https://vibehabit.io","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.20.1_1785312688049_0.1892253382157416","host":"s3://npm-registry-packages-npm-production"}},"0.20.2":{"name":"vibehabit","version":"0.20.2","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.20.2","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"ce3b5d99bb4c3a17065fd4c403ffcfd87d9767b6","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.20.2.tgz","fileCount":35,"integrity":"sha512-nX1kV5CRWDSxKhJA+GCgfA3+H6PYNhqNREhYN+mt86PzcIYsEXN6D/chBkaWygfcXBUOvldCZoBQkg8JGOIk3Q==","signatures":[{"sig":"MEQCIC9mh08OZIXwPKhQfd103iXsbTLfwy0gJqVJr6jhTzGIAiAlXb57uAhBjPuHAGve3kgaWIvq5nlT0J02fpGAujJzYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1171220},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"2a9b8e32916af26b1666152ac3d1cd5c70f69c8f","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"https://vibehabit.io","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.20.2_1785396341859_0.04576598728895909","host":"s3://npm-registry-packages-npm-production"}},"0.20.3":{"name":"vibehabit","version":"0.20.3","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.20.3","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"e47a6c75be0476969da18f5e863f4f2d624305ba","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.20.3.tgz","fileCount":35,"integrity":"sha512-JOOqvfhNV+TJzh/qmtmqrXXPO0GfLILjTrEmlJgsZrJTx0cIn7xzBnr7nzWfh/uSHdCdiRdqrOCPx+OVo+yQqQ==","signatures":[{"sig":"MEQCIBO1XhSziVndRsV2J6ez35gUh/rqG036URm4wQjs2SoUAiAw6Fhd8g6x/0WnhG5HhIYlPQnFeAqtfF/FaUaYAD80ig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1173557},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"fef702e6b81e4eccfdfda681969f8fcc675a469a","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"https://vibehabit.io","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.20.3_1785398231864_0.26901350878232044","host":"s3://npm-registry-packages-npm-production"}},"0.20.5":{"name":"vibehabit","version":"0.20.5","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.20.5","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"f0b1f84935aedea652c53a1eb3017939786eead8","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.20.5.tgz","fileCount":35,"integrity":"sha512-s98QrQyaT+DDJIRlNoYE36KPeqxiqVZMcDyH/yFvNxIhUQKTTOKZpXZICWjm7eM+tpXLHbS9tX4Pi/2RIZWCOw==","signatures":[{"sig":"MEQCIHG6TLpdy28QEfRV+KQa0MT2VDoZWvgwTKgpbF9N3C+GAiBrr7Om3zU+4+eeX0lXdn/RpnvVSqsgKYw4BT3M65berw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1174712},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"89a1c41e5262b1050d706df79b9105444c80c6f4","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"https://vibehabit.io","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.20.5_1785418144653_0.6007461185319074","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"vibehabit","version":"0.21.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.21.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"2b7ebd9a09633f0f59b1e2cf944170469f37ba44","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.21.0.tgz","fileCount":35,"integrity":"sha512-8hvXV0d2zmpKKDAhnXcDRMI9ZDViJ5GilVQ4Y7XmFk0uG4zsQziNRV1rbtJG0Lwf98eXNyZ+IN26wkTr5M5+ew==","signatures":[{"sig":"MEYCIQCZHn/tVph0gzsmbuDjMIH4fLaJpoI85UO0ZrxJOFsH+gIhAIpKGxg8gQYoPSYuShLYmIE70Hw/yQ008YyGJuxkTxje","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1178301},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"00ad2da7788b0d57e2f959432aa35e5ba4909d42","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"https://vibehabit.io","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.21.0_1785426770299_0.055809644671740655","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"vibehabit","version":"0.22.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.22.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"f691c0bfbd68bf0b2fc5a52ca21fa98ed7451073","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.22.0.tgz","fileCount":36,"integrity":"sha512-1MvHXpzL6FfuNjGISsDkHQzrRf2AJhl6vmR2s7fhiALQlHt+f5m8+qD2/xkKNxOjZmWFo6H+XfWIhcXzRvKHVw==","signatures":[{"sig":"MEUCIQCNZJwyCZr8arEUQcalF6+ARe3TYayK7INUI5V43vOD/AIgJQigfhHPNpXkXH1u6TnWywpcbcXa2VV649Rf+ykxc7o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1215562},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"b255595cf0dea194c56ac59619c87cbc9e55c04d","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","package":"node scripts/package.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"https://vibehabit.io","type":"git"},"_npmVersion":"11.12.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.22.0_1786619547701_0.5752792914186864","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"vibehabit","version":"0.23.0","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"license":"SEE LICENSE IN LICENSE","_id":"vibehabit@0.23.0","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"bin":{"vhb":"dist/index.js","vibehabit":"dist/index.js"},"dist":{"shasum":"3ca7e6d10439e135cb6b6949f77683153e7516bd","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.23.0.tgz","fileCount":37,"integrity":"sha512-ns2Vl+TV6RqQVNQHrkVkR+BdyETb9TDlnIxVVC1PfSfIvu4WN+mj9hCqaWnd+2qZn03oN4kVhDV3DigHz+YEew==","signatures":[{"sig":"MEQCIHm/sun7sy3h1ABqQYV+nTfrdOeL3+kDdRje3Fr2Q7WUAiBkG+WdxmgUL3XOEL+D0CYOR9nIR2FhFAAaRcXKpQpoYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1230001},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"b58bd07800f5f4b8e583d0311430d53b6d29855b","scripts":{"lint":"biome lint .","test":"npm run build && node scripts/test.mjs","build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","sample":"node scripts/make-sample-ledger.mjs && node web/build-sample-report.mjs","package":"node scripts/package.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"repository":{"url":"https://vibehabit.io","type":"git"},"_npmVersion":"9.6.7","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","directories":{},"_nodeVersion":"18.17.0","dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"_hasShrinkwrap":false,"devDependencies":{"sharp":"^0.32.6","typescript":"^5.5.0","@types/node":"^22.0.0","@biomejs/biome":"2.5.3"},"_npmOperationalInternal":{"tmp":"tmp/vibehabit_0.23.0_1786630726686_0.020744293429928007","host":"s3://npm-registry-packages-npm-production"}},"0.23.1":{"name":"vibehabit","version":"0.23.1","description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","license":"SEE LICENSE IN LICENSE","type":"module","bin":{"vibehabit":"dist/index.js","vhb":"dist/index.js"},"main":"dist/index.js","engines":{"node":">=18"},"scripts":{"build":"node -e \"fs.rmSync('dist',{recursive:true,force:true})\" && tsc","test":"npm run build && node scripts/test.mjs","sample":"node scripts/make-sample-ledger.mjs && node web/build-sample-report.mjs","preflight":"node scripts/preflight.mjs","prepublishOnly":"npm test","package":"node scripts/package.mjs","lint":"biome lint ."},"repository":{"type":"git","url":"https://vibehabit.io"},"homepage":"https://vibehabit.io","bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"dependencies":{"@anthropic-ai/sdk":"^0.110.0"},"devDependencies":{"@biomejs/biome":"2.5.3","@types/node":"^22.0.0","sharp":"^0.32.6","typescript":"^5.5.0"},"gitHead":"f9ab41e6abf57331b31b412bdb65eab9b532198f","_id":"vibehabit@0.23.1","_nodeVersion":"18.17.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-Gg+2oL5YGi5qvPym338mT0dI1BhtJoG6dtC1ki6mUsGtiL/vaxMUKeaGQFbacsDxYmsep8zt/tiEpae0riKOpA==","shasum":"54739aacc1f2c578c1b85624ec164165cadf80e4","tarball":"https://registry.npmjs.org/vibehabit/-/vibehabit-0.23.1.tgz","fileCount":37,"unpackedSize":1235904,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEnk+hAV9mHuIQQVPSORMpD+0oJvYmA/rvaoMC7saDSZAiEAgJdP7R3CU8puRLPq+0wgxZgCNRRhAtljdOOJ1IzmvzU="}]},"_npmUser":{"name":"vibehabit","email":"joeaspence@gmail.com"},"directories":{},"maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vibehabit_0.23.1_1786960224885_0.011825745814715294"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-09T11:40:05.566Z","modified":"2026-08-17T09:50:25.419Z","0.2.0":"2026-07-09T11:40:05.773Z","0.3.0":"2026-07-09T12:22:10.824Z","0.3.1":"2026-07-09T22:10:23.447Z","0.4.0":"2026-07-09T23:15:47.995Z","0.5.0":"2026-07-09T23:49:39.720Z","0.5.1":"2026-07-10T08:59:51.051Z","0.6.0":"2026-07-10T11:26:40.275Z","0.7.0":"2026-07-10T13:02:22.829Z","0.7.1":"2026-07-10T13:22:25.379Z","0.8.0":"2026-07-10T16:50:12.911Z","0.8.1":"2026-07-11T08:58:48.696Z","0.9.0":"2026-07-11T13:01:16.579Z","0.10.0":"2026-07-11T14:56:15.104Z","0.11.0":"2026-07-13T15:09:25.729Z","0.12.0":"2026-07-13T17:27:22.973Z","0.13.0":"2026-07-13T19:16:42.952Z","0.13.1":"2026-07-13T20:02:40.220Z","0.13.2":"2026-07-13T20:11:26.869Z","0.13.3":"2026-07-13T20:27:16.028Z","0.13.4":"2026-07-13T21:26:07.611Z","0.14.0":"2026-07-17T09:13:13.384Z","0.15.0":"2026-07-17T15:13:10.164Z","0.15.1":"2026-07-17T15:55:02.090Z","0.16.0":"2026-07-18T12:32:43.658Z","0.16.1":"2026-07-18T13:00:10.906Z","0.16.2":"2026-07-20T11:26:08.789Z","0.16.3":"2026-07-21T22:07:57.720Z","0.17.0":"2026-07-22T10:35:29.257Z","0.18.0":"2026-07-23T13:47:04.119Z","0.19.0":"2026-07-23T14:27:54.414Z","0.19.1":"2026-07-23T22:37:34.494Z","0.19.2":"2026-07-24T21:23:46.509Z","0.19.3":"2026-07-24T21:53:37.854Z","0.20.0":"2026-07-27T10:06:05.142Z","0.20.1":"2026-07-29T08:11:28.226Z","0.20.2":"2026-07-30T07:25:42.020Z","0.20.3":"2026-07-30T07:57:12.041Z","0.20.5":"2026-07-30T13:29:04.828Z","0.21.0":"2026-07-30T15:52:50.493Z","0.22.0":"2026-08-13T11:12:27.898Z","0.23.0":"2026-08-13T14:18:46.881Z","0.23.1":"2026-08-17T09:50:25.233Z"},"bugs":{"url":"https://github.com/vibehabithq/feedback/issues"},"license":"SEE LICENSE IN LICENSE","homepage":"https://vibehabit.io","keywords":["claude","claude-code","hooks","coaching","habits","context","cli"],"repository":{"type":"git","url":"https://vibehabit.io"},"description":"vibehabit — the vibecoding habit coach for Claude Code. Hook-based nudges that teach context hygiene, small commits, and test-as-you-go — and measure you needing them less.","maintainers":[{"name":"vibehabit","email":"joeaspence@gmail.com"}],"readme":"<!-- Hero: swap volt-hero-poster.png for the demo GIF once it's filmed (Phase 0 video task). Image is served from vibehabit.io because the source repo is private — raw.githubusercontent won't render. -->\r\n<p align=\"center\">\r\n  <img src=\"https://vibehabit.io/assets/volt-hero-poster.png\" alt=\"vibehabit — a one-line habit nudge appears in your Claude Code session the moment a best practice slips\" width=\"640\">\r\n</p>\r\n\r\n<h1 align=\"center\">vibehabit</h1>\r\n\r\n<p align=\"center\"><strong>The vibecoding habit coach for Claude Code.</strong><br>\r\nA single well-timed nudge when a best practice slips — and a dashboard that measures you needing it less.</p>\r\n\r\n<p align=\"center\">\r\n  <a href=\"https://www.npmjs.com/package/vibehabit\"><img src=\"https://img.shields.io/npm/v/vibehabit?color=2a54f0&label=npm\" alt=\"npm version\"></a>\r\n  &nbsp;·&nbsp; <a href=\"https://vibehabit.io\">vibehabit.io</a> &nbsp;·&nbsp; Node 18+ &nbsp;·&nbsp; 100% local\r\n</p>\r\n\r\n---\r\n\r\nWhen you code with Claude, the model does the typing — so the habits that keep AI-assisted work fast and safe are the ones easiest to skip: resetting stale context, committing in small steps, testing as you go, reading the diff before it lands, vetting what you install, and keeping credentials out of the code. **vibehabit watches for the moment each one slips, drops one line, and then tracks whether you're starting to catch it yourself.**\r\n\r\n```\r\n⚡ vibehabit: context is at 43% of your window (~85k tokens) — quality degrades past 40%; /compact to stay sharp.\r\n⚡ vibehabit: 8 uncommitted edits across 3 files — commit a checkpoint before the next big change.\r\n⚡ vibehabit: that commit went in without a git diff — read AI-written changes before you checkpoint them.\r\n```\r\n\r\n## Why it's worth running\r\n\r\n- **Stop paying for context you don't need.** Working past ~40% of your window degrades answers *and* burns money re-reading a context that went stale forty prompts ago. The context coach reads your session's real token usage and nudges you to `/compact` right at the line — measured from your own transcript, not a guess.\r\n- **Ship changes you've actually read.** Smaller commits, tests run while the diff is still small, diffs read before they land, dependencies vetted, secrets kept out of the code. Honest process improvements — the ones the ledger can actually show — not an unfalsifiable \"better code\" claim.\r\n- **The actual product is needing it less.** Every nudge fires **once per streak** — it reminds, it never nags — and the dashboard tracks your self-catch rate climbing week over week. Success is the nudge count going to zero.\r\n\r\n## Everything stays on your machine\r\n\r\nConfig, ledger, and reports live in `~/.vibehabit/` and are never uploaded. **No accounts, no cloud storage, no telemetry, no analytics — and no vibehabit server anywhere in the loop.** The one network call the coaching makes is the context coach sending your prompt to **Anthropic under your own API key** (BYOK) — you calling Anthropic directly, not us. License checks are an offline signature verification, so even paying never phones home.\r\n\r\nThe only thing that sends **code** anywhere is `vibehabit audit`, and only when you ask: a separate opt-in command that reviews diffs you've already accepted. It prints what it would upload and what it can cost, and waits for a yes. Only a finding's file, category, and severity are stored — never your code.\r\n\r\n## Try it in ~10 seconds\r\n\r\n```bash\r\nnpm install -g vibehabit\r\nvibehabit demo          # replays every coach's nudge — no API key, touches nothing\r\nvibehabit install-hook  # registers the hooks in ~/.claude/settings.json\r\n```\r\n\r\nThen start a **new** Claude Code session for the hooks to take effect. `vibehabit demo` runs your nudges through the real coaching code, so what you see is exactly what fires in a session.\r\n\r\n## The coaches\r\n\r\n| Coach | Signal | Nudge |\r\n|---|---|---|\r\n| **Context hygiene** | Your new prompt pivots away from the session's current work (scored by `claude-haiku-4-5`; coupling-aware — follow-ups, questions, docs, and coupled files are never flagged, and short context-dependent prompts like \"done\" or \"what next\" skip evaluation entirely) | `⚡ vibehabit: topic shift (auth middleware → tax calculation) — consider /compact to drop stale context.` |\r\n| **Context size** | Measured context (read from the session transcript's real usage data) crosses `default_target_pct` of your window — the ~40% line where answer quality degrades; re-nudges only after size doubles | `⚡ vibehabit: context is at 43% of your window (~85k tokens) — quality degrades past 40%; /compact to stay sharp.` |\r\n| **Commit hygiene** | Uncommitted edits pile past `commit_edit_threshold` (default 8); a `git commit` resets the streak | `⚡ vibehabit: 8 uncommitted edits across 3 files — commit a checkpoint before the next big change.` |\r\n| **Review hygiene** | A `git commit` runs with no `git diff`/`status`/`show` since the previous commit that session | `⚡ vibehabit: that commit went in without a git diff — read AI-written changes before you checkpoint them.` |\r\n| **Test hygiene** | Edits since the last test run pass `test_edit_threshold` (default 10); never nudges a project with no test setup | `⚡ vibehabit: 10 edits without a test run — run your tests now while the diff is small.` |\r\n| **Test-first (TDD)** | Logic edits pile past `tdd_edit_threshold` (default 15) without a single test *file* being touched — running tests isn't enough | `⚡ vibehabit: 15 logic edits without touching a test file — pair new logic with a test while it's fresh.` |\r\n| **Dependency safety** | An installed package name trips an offline risk check — one keystroke off a real package, whether a slipped letter (`expres` → `express`) or a swapped pair (`lodahs` → `lodash`). A plain install of a real package is normal work and never fires | `⚡ vibehabit: \"expres\" looks one keystroke off \"express\" — check the exact package name before building on it; typosquats run code on install.` |\r\n| **Secret safety** | A well-known credential pattern (Anthropic/OpenAI/AWS/GitHub/Slack/Google/Stripe key, private-key PEM, JWT, connection string…) lands in any file that isn't `.env*`. Only the file and pattern kind are ever logged — never the secret | `⚡ vibehabit: possible Anthropic API key hardcoded in app.js — move it to an env var.` |\r\n| **Prompt secret hygiene** | A credential is pasted into the prompt itself — the leak surface the file scans can't see. The match is **redacted from your local history**, not just flagged | `⚡ vibehabit: that prompt contains what looks like an Anthropic API key — reference the variable name instead of pasting the value; it was redacted from your local session history.` |\r\n| **Remediation follow-through** | A flagged secret is still in the file after another edit — the first nudge didn't land | `⚡ vibehabit: the Anthropic API key in config.js is still there after another edit — remove it now, before it reaches a commit.` |\r\n| **Privilege scoping** | A risky action (install, rollback, destructive command) runs while permissions are bypassed. Once per session — a mode set on purpose shouldn't nag | `⚡ vibehabit: a risky action ran while permissions are bypassed (bypassPermissions) — drop back to default mode for installs and history rewrites.` |\r\n| **Suite integrity** | A committed test file carries a `.only`/`.skip`/`xit`. Dropping one *while debugging* is normal and never fires — checkpointing it is the deviation | `⚡ vibehabit: that commit includes a focus/skip marker (.only/.skip) in auth.test.js — it silently disables the rest of the suite.` |\r\n| **Work-loss protection** | Local commits pile up against a remote (`push_ahead_threshold`). A repo with no remote never fires | `⚡ vibehabit: 7 commits are sitting unpushed — push to back them up, so a dead machine can't cost you the work.` |\r\n\r\nEvery coach above is fully local (no API needed) except context hygiene, which uses your Anthropic API key (BYOK) for a ~1-second Haiku evaluation per prompt. A separate low-key reminder tells you when a newer vibehabit is on npm. Run `vibehabit demo` to see every one fire in about ten seconds — it's driven through the real coaches, so it can't drift from this table.\r\n\r\n## Install & upgrade\r\n\r\n```bash\r\nnpm install -g vibehabit\r\nvibehabit install-hook   # registers the hooks in ~/.claude/settings.json\r\n```\r\n\r\nStart a **new** Claude Code session for the hooks to take effect. That session opens with one line confirming vibehabit is live — how many coaches are running, whether the context coach found a key, and what will trip first. It's said once per install, and nothing after it speaks until you've actually earned a nudge. Requires Node 18+. For the context coach, add your API key via `vibehabit config` (or `ANTHROPIC_API_KEY`). No native modules — the install is pure JavaScript and never needs a compiler.\r\n\r\nFrom source: `npm install && npm run build && node dist/index.js install-hook`.\r\n\r\nTo upgrade:\r\n\r\n```bash\r\nvibehabit update                    # checks npm and updates in place\r\n# or, equivalently:\r\nnpm install -g vibehabit@latest\r\n```\r\n\r\nThe hooks are registered as an absolute path to `dist/index.js`, which npm overwrites in place, so new coaching logic takes effect on your next session. The one exception is a release that changes *which* hooks vibehabit registers (a new event or matcher) — re-run `vibehabit install-hook` for those. You don't have to track which releases they are: vibehabit notices a stale registration and tells you (see [Troubleshooting](#troubleshooting)).\r\n\r\n## Commands\r\n\r\n| Command | What it does |\r\n|---|---|\r\n| `vibehabit install-hook` | Registers vibehabit's four Claude Code hooks (UserPromptSubmit, PreCompact, PostToolUse, SessionStart). Non-invasive; `vibehabit uninstall-hook` removes them cleanly. |\r\n| `vibehabit demo` | Prints what every coach's nudge looks like (~10s), driven through the real coaches. No API key needed; touches none of your files. |\r\n| `vibehabit audit` | **Opt-in LLM review of diffs you have already accepted** — the one command that sends code anywhere. Prices the run and asks first (`--dry-run` to see the price and send nothing; `--since <ref>` to narrow; `--yes` to skip the prompt). Needs your Anthropic API key and bills you directly. Only a finding's file, category and severity are stored — never your code. |\r\n| `vibehabit doctor` | Health-checks the install: hooks registered, API key present, ledger writable, build current. `--api` adds a live drift evaluation. |\r\n| `vibehabit feedback` | Opens a pre-filled GitHub issue to report a wrong nudge or a bug. Nothing is auto-sent — it opens your browser and you submit. Optional **redacted** diagnostics (version/platform/config + counts; never a key, path, code, or prompt); opt-in, shown before it's attached. |\r\n| `vibehabit stats` | Terminal dashboard: self-catch rate, commit + test hygiene, week-over-week trends. Free forever. |\r\n| `vibehabit report` | The full coaching report as a local HTML page (`~/.vibehabit/report.html`). Paid, fully available on the 14-day trial; `stats` stays free forever. |\r\n| `vibehabit config` | Settings — where reminders appear, which habits are on, topic-drift handling, sensitivity, context window + degradation line, the commit/test/TDD thresholds, and your API key. Guided when run bare (each prompt shows the recommended default); add `set <key> <value>`, `get <key>` or `--list` to change one setting without the walkthrough. |\r\n| `vibehabit activate <key>` | Validates and stores a license (offline Ed25519 check — no phone-home). Unlocks the full `vibehabit report`. `vibehabit deactivate` removes it. |\r\n| `vibehabit export [path]` | Backs up your local state (config + ledger) to one JSON file. `--no-config` omits key/license; `--stdout` pipes it. |\r\n| `vibehabit import <file>` | Restores an export bundle onto this machine (`--force` to overwrite existing state). |\r\n| `vibehabit reset [--all]` | Wipes your coaching history; `--all` also clears config/license. Previews first — pass `--yes` to confirm. |\r\n| `vibehabit update` | Updates to the latest release via npm. `--check` only reports availability; `--dry-run` prints the command. |\r\n| `vibehabit completion <shell>` | Prints a shell completion script (`bash`, `zsh`, or `fish`) to source from your shell rc. |\r\n| `vibehabit --version` | Prints the installed vibehabit version. |\r\n\r\n## Configuration — `~/.vibehabit/config.json`\r\n\r\nRun `vibehabit config` for a guided walkthrough (every prompt shows the recommended default), or change one setting in place with `vibehabit config set <key> <value>` — `vibehabit config --list` prints every key. You rarely need to edit the file by hand. The main fields:\r\n\r\n```json\r\n{\r\n  \"anthropic_api_key\": \"sk-ant-...\",\r\n  \"hook_mode\": \"notify\",\r\n  \"nudge_delivery\": \"both\",\r\n  \"sensitivity_threshold\": 0.75,\r\n  \"commit_edit_threshold\": 8,\r\n  \"test_edit_threshold\": 10,\r\n  \"tdd_edit_threshold\": 15,\r\n  \"context_window_tokens\": 1000000,\r\n  \"default_target_pct\": 0.4\r\n}\r\n```\r\n\r\n- **`hook_mode`** — how the context coach handles a topic pivot: `notify` (\"remind me\" — a visible one-liner, non-blocking; default) · `advise` (\"refocus only\" — silently steers Claude's focus) · `block` (stops the prompt with a suggestion) · `off` (log only). The habit coaches are always non-blocking.\r\n- **`nudge_delivery`** — where a visible reminder appears (applies to every coach): `both` (a terminal notice *and* echoed in Claude's reply — default) · `system` (terminal notice only) · `inline` (in Claude's reply only).\r\n- **`sensitivity_threshold`** (0.1–1.0) — drift score needed to flag a pivot; lower = more aggressive.\r\n- **`commit_edit_threshold` / `test_edit_threshold` / `tdd_edit_threshold`** — edits allowed to pile up before each respective nudge.\r\n- **`context_window_tokens`** — your model's context window (default `1000000`; set `200000` for a 200k-window model). A starting assumption: per session vibehabit overrides it with whatever the transcript proves — a `[1m]` model marker, measured context exceeding the configured value, or an auto-compaction firing under 500k (a 200k ceiling).\r\n- **`default_target_pct`** — the degradation line as a fraction of the window (default `0.4`): the context-size coach nudges past it and the dashboard reports how often you work above it.\r\n\r\n## How the coaching loop works\r\n\r\n1. **Observe** — a `PostToolUse` hook logs every Edit/Write, `git commit`, and test command to the local ledger (`~/.vibehabit/session_history.jsonl`); a `PreCompact` hook records every context reset you perform.\r\n2. **Detect** — on each prompt submit, a `UserPromptSubmit` hook checks the habit counters and (with an API key) scores topic drift against your recent prompts + git status, with a structured-output Haiku call.\r\n3. **Nudge** — a single visible line, surfaced as a terminal notice and/or echoed in Claude's reply (your `nudge_delivery` choice). Fires once per streak; fails open on any error (it can never block your work).\r\n4. **Measure** — `vibehabit stats` / `vibehabit report` track nudges vs. self-catches week-over-week. The goal is the nudge count going to zero: the product working means you needing it less.\r\n\r\n## Free vs. paid\r\n\r\n**Free forever:** every coach and `vibehabit stats` — the terminal dashboard never checks a license. **Paid:** the full `vibehabit report` (conductivity tiers, achievements, graduation curves) as a local HTML page. **It's live during the automatic 14-day trial** — counted from your first ledger event, no signup, no account. After that, a one-time license (`vibehabit activate <key>`) unlocks it; your ledger stays intact and renders in full the moment you activate. The license is verified offline against a baked-in public key — even paying never phones home. Get a licence at [vibehabit.io](https://vibehabit.io).\r\n\r\n## Troubleshooting\r\n\r\nFor day-to-day use — tuning a coach that's nagging, turning one off, what to do when a nudge is wrong, and reading the dashboard — see the [usage guide](docs/usage.md).\r\n\r\nRun `vibehabit doctor` first — it checks that the hooks are registered, your API key is present, the ledger is writable, and the build is current.\r\n\r\n**A coach never fires.** When a release adds a new hook event or matcher, an older registration can go stale, and an unregistered coach fails *silently* — it doesn't error, it just never runs, and the metric it feeds reads zero. Every prompt, vibehabit compares the hooks on disk against the ones this build expects and says so once if they've diverged:\r\n\r\n```\r\n⚡ vibehabit: hook registration is stale (missing SessionStart) — /clear\r\n   self-catches aren't recorded. Run `vibehabit install-hook`.\r\n```\r\n\r\nRe-running `vibehabit install-hook` fixes it (nothing else may write to `~/.claude/settings.json`).\r\n\r\n**Coaching feels out of date.** The stale-registration check compares *which* hooks are registered, so it can't see a stale *build*: if a global upgrade half-failed or a hook still points at an old source checkout, the events match and vibehabit keeps running old logic. `vibehabit --version` confirms what you're actually running.\r\n\r\n## Notes & limitations\r\n\r\n- Hooks fail open everywhere: an evaluator error, unreadable payload, or missing key can never block a prompt or a compaction.\r\n- The context coach needs prompt history — it never fires on the first prompt of a session, and slash commands are never scored.\r\n- Claude Code offers no pre-Enter interception, so nudges arrive with the *reply* to the prompt that crossed the line — which is exactly what makes vibehabit a trainer rather than an autopilot: you act on the next one yourself.\r\n","readmeFilename":"README.md"}