{"_id":"openwolf","_rev":"12-986df355dac1836260d4386549516bd0","name":"openwolf","dist-tags":{"latest":"2.5.1"},"versions":{"1.0.0":{"name":"openwolf","version":"1.0.0","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@1.0.0","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"6e0499e1b985045fcf20b1591aa985d63c774383","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-1.0.0.tgz","fileCount":112,"integrity":"sha512-OFQxlk9rg10tjSy75u98Ufg6C2biZQPIqcVFwu79FwrU+s1Y/muIcpv5d0BXLl/3maXOcP9LTykblJy/4mrXGQ==","signatures":[{"sig":"MEUCIQDpy17QGaGAMl3alwr/lGNSOu1ICDDAMubA5Y9LY17/lgIgVbLRIoDs/zSzi9IdmLkjh2IqsYdGfk6PAl8nq2doCcE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1339006},"type":"module","engines":{"node":">=20.0.0"},"scripts":{"dev":"tsc --watch","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.6.2","description":"Token-conscious AI brain for Claude Code projects","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","glob":"^11.0.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.0.0","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.39.1"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.0.0_1773950281037_0.9641830448400524","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"openwolf","version":"1.0.1","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@1.0.1","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"cf163954f646207301dbb3b31be1713dbce95930","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-1.0.1.tgz","fileCount":112,"integrity":"sha512-gU3CRnAM57aDB7RZHPVFPBe1CrHMleytwk42jthk58a7iG2wNTB7KMx0ln2/3NXIxDyJfCB/J7+GzO6JEPLhkw==","signatures":[{"sig":"MEYCIQD8WZ0Uz6YkG4PNo4iidkewImFN17pIeYMEj4188JmGPgIhAKg/I9CZbkRivmmnAgsPyzM4muu/J4DzGdgqNrWdUzdC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1339336},"type":"module","engines":{"node":">=20.0.0"},"scripts":{"dev":"tsc --watch","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.6.2","description":"Token-conscious AI brain for Claude Code projects","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","glob":"^11.0.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.0.0","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.39.1"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.0.1_1773950998052_0.6867345396429281","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"openwolf","version":"1.0.2","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@1.0.2","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"83cd382bc23a1084ed56a4553ddc3e039a7973c2","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-1.0.2.tgz","fileCount":112,"integrity":"sha512-oxQVbo4weutBYH1r+KXykcnY642qR3xmFceioiWl/mIwPlGzHelWnr7orJx6Uhs6GQ/GkpGKxdhMy2Whz16LEA==","signatures":[{"sig":"MEUCID+lvZ/+aHoIe/6dCdm4QmdQMnO0nlzyzNsgnnw0Y7k8AiEAu+XYL9MrLFvpCV0KKbvQhd7/8Ibohe056XjrfbGmkr0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1339976},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"e6e60bb1bce30da31a5619b8a6c627f3999de31c","scripts":{"dev":"tsc --watch","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.6.2","description":"Token-conscious AI brain for Claude Code projects","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.0.0","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.39.1"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.0.2_1773952735058_0.11886553044444437","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"openwolf","version":"1.0.3","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@1.0.3","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"47d24522ceb23d0de1b1b081e7708739f7b1f43e","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-1.0.3.tgz","fileCount":112,"integrity":"sha512-tEOe2QoToHmGbOyi7FjSdD5zXMjV2wTZ5Rn/6942XMByQiphrmvO06VlhHnG5RA2bOMu6bsUHiZ1qsPtJnLScw==","signatures":[{"sig":"MEUCIHu+Tk3BU87M9MuOxvLcP2vKbNhfeuelbqbLxfbipTCeAiEAl24zk0t+kL7Gb/M8aJlrVrbTbTqC0FV8ZVyz7iRbTmk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1339971},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"00c607fdd99f14773218121f91c2b0dfa3b1bd1a","scripts":{"dev":"tsc --watch","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.6.2","description":"Token-conscious AI brain for Claude Code projects","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.0.0","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.39.1"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.0.3_1773959853203_0.07018350670058227","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"openwolf","version":"1.0.4","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@1.0.4","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"269ea47864e02f4cd309e5fdc2f3c894cf8c8062","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-1.0.4.tgz","fileCount":112,"integrity":"sha512-Bx+l12PsBu1XbcAp2ikY0pOPq0nUUMtuf/48M3BAfHDbQelnVrAnQWOLZbtBuNDJmDOxVU69fBO7QXEjOVc0tQ==","signatures":[{"sig":"MEYCIQDX8VUMkEl7MeazL+NJkMKeUKoxyU/QukYx0FZdBolU/gIhAMi4B2VSgoWW0lf1/uQvzYfNr3rKv5lgCrVbMrdSN82Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1340424},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"0cd76dedd83092c03d3f50c01982e49ed0e671cb","scripts":{"dev":"tsc --watch","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.6.2","description":"Token-conscious AI brain for Claude Code projects","directories":{},"_nodeVersion":"24.13.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.0.0","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^3.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.39.1"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_1.0.4_1773960854631_0.13122467633522894","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"openwolf","version":"2.0.0","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@2.0.0","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"f8427ca75868bd5b73bd51d44e2aa10f4b300b4c","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-2.0.0.tgz","fileCount":153,"integrity":"sha512-c4Jom7enpP2Yy6nbwpklAElj/bbUsriuM1tTdsUCga72H8z75GSSdM9htFaRuPrk1G5C4sO3sQ37adslwbundw==","signatures":[{"sig":"MEUCICg2ZqvHf8YIIWFmpdLSgsq9o0vZ9wbC6LamvSBRqeuyAiEAtqTwYVPtghv16k11mhTgOZgq9x9Xe2kDXbpO9vaqyp8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1550719},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"7e7335ac5dabd952bffd0e6ecaca35d3b091fdcc","scripts":{"dev":"tsc --watch","test":"node --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.12.1","description":"The second brain for Claude Code, now for every AI coding assistant: context management, architecture scaffolding, and smarter token utilization through lifecycle hooks.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.42.0"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_2.0.0_1784068916516_0.06792836842883254","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"openwolf","version":"2.0.1","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@2.0.1","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"8687056d09ae88cd0fd42b9c1013f1cd65e1b48d","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-2.0.1.tgz","fileCount":153,"integrity":"sha512-049cNjWxcrniJ9VkJwAWNh2vtqCSyMYGp9+Fc+FCZKj/daBIWGucHUgzpdLovHdDRvSUg6QJ2oQUSFQvJhbOTQ==","signatures":[{"sig":"MEUCIGTb2w9GwdwViHxIyvUjRTtJT8L6oKf9Qt47/lz+TPZjAiEAkKRJL5phxzGc4W+gQyYEz1QhmXVWT6wfiidN6NZsZGI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1560807},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"9b0e770d3077dac6ddfa579c43c165d9fe782ed0","scripts":{"dev":"tsc --watch","test":"node --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.12.1","description":"The second brain for Claude Code, now for every AI coding assistant: context management, architecture scaffolding, and smarter token utilization through lifecycle hooks.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.42.0"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_2.0.1_1784072144296_0.9700388910387197","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"openwolf","version":"2.0.3","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@2.0.3","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"def8a5911de2f2bb9fe93a8c508d5312617c85a8","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-2.0.3.tgz","fileCount":155,"integrity":"sha512-Y5JuCTW8JLJNd4JCcfNxGDwmWY1yu0DBuzr7LErvM7f0Y49nz8KO5+tjJ5jlnVzCkYVLOEipigfTVOGv1g1jrg==","signatures":[{"sig":"MEQCIH2cCZYm4/r/4TdXmRLRK06zKt5gwfQIbVTgQJLxPAotAiAcsjnYohBg5Mj7p6lqBrJZmXmzanLS5/L0qvrbF6KL1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1580721},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"2af988ac32c98debee65032e7043c8c7e86c4f5c","scripts":{"dev":"tsc --watch","test":"node --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.12.1","description":"The second brain for Claude Code, now for every AI coding assistant: context management, architecture scaffolding, and smarter token utilization through lifecycle hooks.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.42.0"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_2.0.3_1786986322513_0.8134771849905991","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"openwolf","version":"2.0.4","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@2.0.4","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"71005dd479aea042b7037b07cd7ff456a8c6c93f","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-2.0.4.tgz","fileCount":167,"integrity":"sha512-TpGalbAyWHqVb6/YjXkr/+TcOHPUhlZErsRNqsF0oXAdGa2uAsVUXP8IDbi0njZxVmyY5QOfsqs16DNqHFLYzQ==","signatures":[{"sig":"MEYCIQCxY6ItaFFQSSsoywiLRUP0H3ZW8y5ceqAMZMcgLTUizAIhAPMWj3UXCu7OYOdFST+va/uytk/RSTLWlQ7MaWFZHhMi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1646076},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"7769e5ed55bf02ebb84c16e70bea427282a4236f","scripts":{"dev":"tsc --watch","test":"node --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.12.1","description":"The second brain for Claude Code, now for every AI coding assistant: context management, architecture scaffolding, and smarter token utilization through lifecycle hooks.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.42.0"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_2.0.4_1787069886903_0.7622818415557044","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"openwolf","version":"2.4.1","keywords":["claude","ai","context","token","openwolf","claude-code","developer-tools"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@2.4.1","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"9a81d9ac61a06b97af5aa67de38081d0b3860bb3","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-2.4.1.tgz","fileCount":219,"integrity":"sha512-xOAUqPgw26JuJWAmMzxPG53kf95tsnJzgzRrLAq+ixMlmI9be41XRwRvYMjB8q7jon95Xi8fYQvvFMpVBy+bBg==","signatures":[{"sig":"MEUCIQD9y86U7GsUBflwY4/kI00zx+dQPtiH5LuR5e1KlqAcbQIgQ1jENrrrsTASYt7TE6BOiMNoU2FeGnFmDSPVLho71q8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2003312},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"c8acf0a0338439dd8b4f691c576be2b49787e4d5","scripts":{"dev":"tsc --watch","test":"node --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.12.1","description":"The second brain for Claude Code, now for every AI coding assistant: context management, architecture scaffolding, and smarter token utilization through lifecycle hooks.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1","web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.42.0"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_2.4.1_1787256166739_0.38128086932893535","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"openwolf","version":"2.5.0","keywords":["claude-code","codex","opencode","agent-memory","context-engineering","observability","context","token","openwolf","developer-tools","ai"],"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","_id":"openwolf@2.5.0","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"bin":{"openwolf":"dist/bin/openwolf.js"},"dist":{"shasum":"c70db033afead36ee7840baa4956d0d5077a25e6","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-2.5.0.tgz","fileCount":218,"integrity":"sha512-PslCmYpk8zszbVWV1bKLMFdK70Ldwl1Elfyfen0xkuQERKgbN/R6Oht6Q2PdPLr+YNHxZbuqpAgIdpMOIyDV0Q==","signatures":[{"sig":"MEYCIQDoKrk8eh5dMuq1GgR6d2bVotX4UopJLRmaH3p/NDEe+wIhAN9PWFf2yOcdvYiLg+IGplT5bTPmQQsdo2YmcCk3dqa2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2014867},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"12c21b593b316bd97d91a7fb16a031fd92035009","scripts":{"dev":"tsc --watch","test":"node --test tests/*.test.ts","build":"tsc && pnpm build:hooks && pnpm build:dashboard","docs:dev":"vitepress dev docs","prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","docs:build":"vitepress build docs","build:hooks":"tsc -p tsconfig.hooks.json","prepublishOnly":"pnpm build","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard"},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"repository":{"url":"git+https://github.com/cytostack/openwolf.git","type":"git"},"_npmVersion":"11.12.1","description":"One project memory across Claude Code, Codex and OpenCode. Token usage measured, not estimated. Zero API calls.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ws":"^8.18.0","open":"^10.0.0","chalk":"^5.3.0","express":"^5.2.1","chokidar":"^4.0.0","commander":"^12.0.0","node-cron":"^4.2.1","web-tree-sitter":"^0.24.7","tree-sitter-wasms":"^0.1.13"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.0","react":"^19.0.0","recharts":"^2.15.0","@types/ws":"^8.5.12","react-dom":"^19.0.0","vitepress":"^1.6.4","typescript":"^5.7.0","@types/node":"^22.0.0","tailwindcss":"^4.0.0","@types/react":"^19.0.0","@types/express":"^5.0.0","@types/node-cron":"^3.0.11","@types/react-dom":"^19.0.0","@tailwindcss/vite":"^4.0.0","@vitejs/plugin-react":"^4.0.0"},"optionalDependencies":{"puppeteer-core":"^24.42.0"},"_npmOperationalInternal":{"tmp":"tmp/openwolf_2.5.0_1787374166591_0.6543203030785396","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"openwolf","version":"2.5.1","description":"One project memory across Claude Code, Codex and OpenCode. Token usage measured, not estimated. Zero API calls.","type":"module","bin":{"openwolf":"dist/bin/openwolf.js"},"scripts":{"prebuild":"node -e \"const fs=require('fs');if(fs.existsSync('dist'))fs.rmSync('dist',{recursive:true})\"","build":"tsc && pnpm build:hooks && pnpm build:dashboard","build:hooks":"tsc -p tsconfig.hooks.json","build:dashboard":"cd src/dashboard/app && npx vite build --outDir ../../../dist/dashboard","dev":"tsc --watch","docs:dev":"vitepress dev docs","docs:build":"vitepress build docs","prepublishOnly":"pnpm build","test":"node --test tests/*.test.ts"},"dependencies":{"chalk":"^5.3.0","chokidar":"^4.0.0","commander":"^12.0.0","express":"^5.2.1","node-cron":"^4.2.1","open":"^10.0.0","tree-sitter-wasms":"^0.1.13","web-tree-sitter":"^0.24.7","ws":"^8.18.0"},"optionalDependencies":{"puppeteer-core":"^24.42.0"},"devDependencies":{"@tailwindcss/vite":"^4.0.0","@types/express":"^5.0.0","@types/node":"^22.0.0","@types/node-cron":"^3.0.11","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@types/ws":"^8.5.12","@vitejs/plugin-react":"^4.0.0","react":"^19.0.0","react-dom":"^19.0.0","recharts":"^2.15.0","tailwindcss":"^4.0.0","typescript":"^5.7.0","vite":"^6.0.0","vitepress":"^1.6.4"},"engines":{"node":">=20.0.0"},"license":"AGPL-3.0-only","author":{"name":"Cytostack Pvt Ltd"},"repository":{"type":"git","url":"git+https://github.com/cytostack/openwolf.git"},"homepage":"https://github.com/cytostack/openwolf","bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"keywords":["claude-code","codex","opencode","agent-memory","context-engineering","observability","context","token","openwolf","developer-tools","ai"],"gitHead":"a7625af4df494cafc00c197bff26fa3af4d0f649","_id":"openwolf@2.5.1","_nodeVersion":"24.15.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-GaffICiUE3e8DTykPsMkmpLiTk1Prx1wG53hg5wtAgbHs9YVogg9QHDojzuvoaKZvvq5jYyBghovyHLVHruerQ==","shasum":"239d64425dd0610a5d615ce5b113ee11a8d6fb98","tarball":"https://registry.npmjs.org/openwolf/-/openwolf-2.5.1.tgz","fileCount":222,"unpackedSize":2095321,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHlmA1f4TSwDbbM+d4qHwBBH2S9K/qNWvE/ch7egc1CFAiAKPrGIq2zU9vwUGVIUhkRPXkdcWlqfbTlG2QxjB3TZVA=="}]},"_npmUser":{"name":"openwolf","email":"cytostack@gmail.com"},"directories":{},"maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openwolf_2.5.1_1788035477121_0.7079163721069852"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-19T19:58:01.036Z","modified":"2026-08-29T20:31:17.450Z","1.0.0":"2026-03-19T19:58:01.254Z","1.0.1":"2026-03-19T20:09:58.195Z","1.0.2":"2026-03-19T20:38:55.249Z","1.0.3":"2026-03-19T22:37:33.417Z","1.0.4":"2026-03-19T22:54:14.797Z","2.0.0":"2026-07-14T22:41:56.715Z","2.0.1":"2026-07-14T23:35:44.455Z","2.0.3":"2026-08-17T17:05:22.902Z","2.0.4":"2026-08-18T16:18:07.100Z","2.4.1":"2026-08-20T20:02:46.900Z","2.5.0":"2026-08-22T04:49:26.807Z","2.5.1":"2026-08-29T20:31:17.297Z"},"bugs":{"url":"https://github.com/cytostack/openwolf/issues"},"author":{"name":"Cytostack Pvt Ltd"},"license":"AGPL-3.0-only","homepage":"https://github.com/cytostack/openwolf","keywords":["claude-code","codex","opencode","agent-memory","context-engineering","observability","context","token","openwolf","developer-tools","ai"],"repository":{"type":"git","url":"git+https://github.com/cytostack/openwolf.git"},"description":"One project memory across Claude Code, Codex and OpenCode. Token usage measured, not estimated. Zero API calls.","maintainers":[{"name":"openwolf","email":"cytostack@gmail.com"}],"readme":"<h1 align=\"center\">OpenWolf</h1>\n\n<p align=\"center\">\n  <strong>Your agents change. Your project memory shouldn't.</strong>\n</p>\n\n<p align=\"center\">\n  openwolf keeps one project memory across Claude Code, Codex and OpenCode,<br />\n  intercepts the reads and command output that quietly fill your context,<br />\n  and reports what each session actually cost, read from the harness transcript.<br />\n  Pure local file I/O: no API calls, no telemetry, no added latency.\n</p>\n\n<p align=\"center\">\n  <sub><b>Full hooks:</b> Claude Code &nbsp;·&nbsp; <b>Core hooks:</b> Codex CLI, OpenCode &nbsp;·&nbsp; <b>Context only:</b> Cursor, Gemini CLI, Antigravity</sub>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/openwolf\"><img src=\"https://img.shields.io/npm/v/openwolf?color=cb3837&label=npm\" alt=\"npm version\" /></a>\n  <a href=\"https://www.npmjs.com/package/openwolf\"><img src=\"https://img.shields.io/npm/dm/openwolf?color=2ea44f&label=downloads\" alt=\"npm downloads\" /></a>\n  <a href=\"https://github.com/cytostack/openwolf/stargazers\"><img src=\"https://img.shields.io/github/stars/cytostack/openwolf?color=444&label=stars\" alt=\"GitHub stars\" /></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-AGPL--3.0-blue\" alt=\"License\" /></a>\n  <a href=\"https://nodejs.org\"><img src=\"https://img.shields.io/badge/node-%3E%3D20-2ea44f\" alt=\"Node.js\" /></a>\n</p>\n\n<p align=\"center\">\n  <img src=\"assets/openwolf-dashboard.png\" alt=\"\" width=\"900\" />\n</p>\n\n| Without OpenWolf | With OpenWolf |\n|------------------|---------------|\n| Each agent starts cold and learns your project separately | One `.wolf/` brain, shared across Claude Code, Codex and OpenCode |\n| Switching agents means losing everything the last one learned | Corrections, bug fixes and project map follow you across tools |\n| Your token usage is a monthly invoice with no line items | Real usage read from the transcript, per session, per agent |\n| Nobody can tell you what broke the prompt cache | Attributed: model switch, compaction, version change, expiry |\n| The agent rereads a file it already saw | Repeated reads caught; oversized Bash output condensed before it enters context |\n\n## What it does\n\nCoding agents waste tokens in predictable ways. A `grep -rn` dumps 40,000\ntokens into context, and the session re-reads them from cache on every later\nAPI call. The same file gets printed three times with `cat`. Conventions you\ntaught the agent last week are gone today. When context compacts, the agent\nforgets what it already did.\n\nOpenWolf installs lifecycle hooks into your agent and fixes this underneath\nyour normal workflow:\n\n- Oversized Bash output is condensed before it enters context. The full text\n  stays on disk with a pointer. Test failures are never touched.\n- Your project gets a durable index. `openwolf find` locates any symbol in\n  under 1k tokens. Large files carry exact line ranges so the agent reads one\n  function, not the whole file.\n- Corrections, conventions, and bug fixes are written to files that survive\n  sessions, travel through git, and reach every agent and teammate.\n- After compaction, OpenWolf restores what was lost: in-flight state, your\n  rules, and the path-scoped instructions the platform drops.\n- Everything is measured. Real usage from transcripts, hook delivery verified\n  against the harness's own records, and savings counted only where OpenWolf\n  can prove them.\n\n## Quick start\n\n```bash\nnpm install -g openwolf\ncd your-project\nopenwolf init\n```\n\n`init` detects the agents installed on your machine and wires each of them.\nThen use your agents as normal.\n\n## Supported agents\n\n| Agent | Integration |\n|-------|-------------|\n| Claude Code | Full: 12 hooks, output governor, skills, verified measurement |\n| Codex CLI | Core hooks via `.codex/hooks.json` + `AGENTS.md`: session, read, write, compaction, stop |\n| OpenCode | Native plugin + `AGENTS.md`: session and tool before/after |\n| Cursor | Rules file (context only) |\n| Gemini CLI | `GEMINI.md` block (context only) |\n| Antigravity | `AGENTS.md` block (context only) |\n\nAll agents share the same `.wolf/` directory. It ships with a `.gitignore`\nthat commits the useful state (conventions, handoff, bug log, index) and\nignores the machine-local runtime (ledgers, caches). On Claude Code the\nlearned conventions also sync with native auto-memory, in both directions.\n\n## How it works\n\n`openwolf init` creates `.wolf/` and registers hooks with your agent. The\nhooks are plain Node.js scripts: no network, no AI calls, no dependencies.\n\n| File | Purpose |\n|------|---------|\n| `anatomy-index.json` | Project index: descriptions, sizes, symbols, import graph |\n| `cerebrum.md` | Preferences, conventions, and a Do-Not-Repeat list |\n| `STATUS.md` | Session handoff. Regenerate with `/handoff` |\n| `buglog.json` | Searchable memory of bugs and their fixes |\n| `memory.md` | Action log per session |\n| `token-ledger.json` | Measured, estimated, and verified usage |\n| `hooks/` | The 12 lifecycle hooks, with health heartbeats |\n| `cache/bash/` | Verbatim copies of every condensed Bash output |\n\nDuring a session:\n\n- **Session start.** A ~400-token index of your project state is injected:\n  what each file holds, the top rules, the current handoff. Pointers, not\n  content.\n- **Before reads.** Duplicate reads get a note. Large files get their symbol\n  map so the agent can read a slice.\n- **After Bash.** Output over 2,000 tokens is condensed by command family:\n  grep floods keep the first matches per file plus counts, `git show` keeps\n  the header and diff stats, file re-prints keep head and tail. Original\n  preserved, delta recorded. Test and build output is suggested-only by\n  default because failure detail matters more than tokens.\n- **Every 25 tool batches.** The top rules are repeated in one short note.\n  Instruction compliance decays as sessions get longer (the one controlled\n  study of this, across 1,650 sessions, found the decay and found that file\n  size does not matter). Cadence is the fix.\n- **On compaction.** State, rules, and scoped instructions are re-injected.\n- **On stop.** The ledger records real usage per model and verifies against\n  the transcript which hooks fired, which failed, and which injected context\n  actually reached the model.\n\n## Measurement\n\n```bash\nopenwolf report\n```\n\n```\n  Measured (all project transcripts, scanned now)\n    API calls:              814\n    Output tokens:          737,952\n    Cache reads:            238,172,904\n    Cache writes:           3,323,678\n\n  Bash governor (measured at the rewrite point)\n    Governed calls:         12\n    Original output:        96,410\n    Entered context:        14,867\n    Kept out of context:    81,543\n\n  Cache rebuilds (last 7 days): 6 events, 1,942,520 tokens re-written\n    model_switch         3 events  929,737 tok\n    cache_expired        1 events  524,661 tok\n    unattributed         2 events  488,122 tok\n```\n\nThree things worth knowing about these numbers:\n\n1. The governor delta is measured where nothing else can measure it. The\n   platform's telemetry logs tool output before hooks run, so only the hook\n   that rewrites the output knows what actually entered context.\n2. Cache rebuilds are the most expensive events in an agent session: a full\n   rebuild re-pays your entire context at the write rate instead of the 0.1x\n   read rate. OpenWolf names the trigger and the cost.\n3. Earlier releases reported estimated savings from a heuristic that counted\n   tokens that were actually spent. That math is gone. OpenWolf also reports\n   its own injection cost next to any saving it claims. If a context tool\n   cannot show you measured numbers including its own overhead, doubt it.\n\n`openwolf bench --repo <fixture> --yes` runs the same tasks with and without\nOpenWolf and reports each token dimension separately, plus completion rate\nand the bash re-run rate. It spends real API budget, so it requires `--yes`.\n\n## Reliability\n\nInvisible tools need proof of life. Every hook writes a heartbeat. Session\nstart verifies the installed hooks can load. `openwolf update` runs a\nselfcheck on every hook after install and fails loudly instead of leaving a\nbroken install. The dashboard shows failing hooks with the error. This\nexists because a hook once crashed silently 440 times over three weeks\nbefore anyone noticed.\n\n## Security\n\n- Dashboard binds to 127.0.0.1 with per-project token auth.\n- No shell interpolation anywhere; every process call uses argument arrays.\n- Hooks never auto-approve tool calls. Permission decisions stay yours.\n- Secret-bearing files (`.env`, keys, credentials) never enter any index.\n- Path traversal guards on all cron file access.\n\n## Skills\n\nInstalled for every wired agent:\n\n- `/handoff` regenerates `STATUS.md` from git, the action log, and open items.\n- `/security-audit` runs a layered audit and files results into the bug log.\n- `/reframe` picks or migrates a UI framework from a curated comparison of\n  13, with an anti-generic design mandate.\n\nOn Claude Code, the operating protocol ships as a proper skill so CLAUDE.md\nstays a five-line stub.\n\n## Dashboard\n\n```bash\nopenwolf dashboard\n```\n\nLocal, token-authenticated, live. The hero number is tokens verifiably kept\nout of context, with a plain-language reading of what that means. Around it:\nwhat the measured usage is worth at list price and where that cost sits\n(cache reads usually dominate), OpenWolf's own overhead as a share of what it\nsaved, the governor's results per command family, cache rebuild attribution,\nper-agent breakdown, hook health, the anatomy browser, activity, and cron\ncontrol.\n\n## Commands\n\n```\nopenwolf init              Set up .wolf/ and wire detected agents\nopenwolf status            Health, stats, file integrity\nopenwolf scan              Rebuild the project index\nopenwolf scan --check      CI check: does the index match the tree\nopenwolf find <query>      Locate a symbol or file (ranked, ~1k tokens max)\nopenwolf find --file <p>   One file's description, size, and symbol map\nopenwolf map               Token-budgeted overview of the important files\nopenwolf report            Measured, verified, governed, attributed usage\nopenwolf bench             A/B benchmark with and without OpenWolf (--yes)\nopenwolf bug search <term> Full-text search over the bug memory\nopenwolf dashboard         Open the dashboard\nopenwolf cron list         Scheduled maintenance tasks\nopenwolf update            Update every registered project (backup first)\nopenwolf restore [backup]  Roll back .wolf/ from a backup\n```\n\n## Requirements\n\nNode.js 20+ and at least one supported agent. Works on macOS, Linux, and\nWindows. Bug-log full-text search uses Node's built-in SQLite on 22.5+ and\nfalls back to a simpler matcher below that.\n\n## Limitations\n\n- Estimates use a character-ratio heuristic. Measured and verified numbers\n  come from transcripts and the rewrite point.\n- The Bash governor and decay re-injection currently run on Claude Code.\n  Codex and OpenCode get the core lifecycle hooks; Gemini and Cursor are\n  context-only.\n- Protocol compliance still depends on the model. Hooks enforce what can be\n  enforced and measure the rest.\n\nFound something broken? [File an issue](https://github.com/cytostack/openwolf/issues).\n\n## Contributors\n\nOpenWolf is better because people fixed it. Every merged contribution is credited here. Kindly let us know if we have missed a contribution. \n\n| | | | | |\n|:-:|:-:|:-:|:-:|:-:|\n| [<img src=\"https://github.com/fsener.png\" width=\"60\"/>](https://github.com/fsener)<br/>**fsener** | [<img src=\"https://github.com/albertomenache.png\" width=\"60\"/>](https://github.com/albertomenache)<br/>**albertomenache** | [<img src=\"https://github.com/whydoyouwork.png\" width=\"60\"/>](https://github.com/whydoyouwork)<br/>**whydoyouwork** | [<img src=\"https://github.com/mann1x.png\" width=\"60\"/>](https://github.com/mann1x)<br/>**mann1x** | [<img src=\"https://github.com/GordongWang.png\" width=\"60\"/>](https://github.com/GordongWang)<br/>**GordongWang** |\n| [<img src=\"https://github.com/WeathermanTony.png\" width=\"60\"/>](https://github.com/WeathermanTony)<br/>**WeathermanTony** | [<img src=\"https://github.com/goashem.png\" width=\"60\"/>](https://github.com/goashem)<br/>**goashem** | [<img src=\"https://github.com/bryandent.png\" width=\"60\"/>](https://github.com/bryandent)<br/>**bryandent** | [<img src=\"https://github.com/levnikmyskin.png\" width=\"60\"/>](https://github.com/levnikmyskin)<br/>**levnikmyskin** | [<img src=\"https://github.com/svanack404.png\" width=\"60\"/>](https://github.com/svanack404)<br/>**svanack404** |\n| [<img src=\"https://github.com/riverwolf67.png\" width=\"60\"/>](https://github.com/riverwolf67)<br/>**riverwolf67** | [<img src=\"https://github.com/nottyjay.png\" width=\"60\"/>](https://github.com/nottyjay)<br/>**nottyjay** | [<img src=\"https://github.com/alfasin.png\" width=\"60\"/>](https://github.com/alfasin)<br/>**alfasin** | [<img src=\"https://github.com/ChasLui.png\" width=\"60\"/>](https://github.com/ChasLui)<br/>**ChasLui** | [<img src=\"https://github.com/JarrodAI.png\" width=\"60\"/>](https://github.com/JarrodAI)<br/>**JarrodAI** |\n| [<img src=\"https://github.com/meketreve.png\" width=\"60\"/>](https://github.com/meketreve)<br/>**meketreve** | [<img src=\"https://github.com/Laptopcorei7.png\" width=\"60\"/>](https://github.com/Laptopcorei7)<br/>**Laptopcorei7** | [<img src=\"https://github.com/statik1.png\" width=\"60\"/>](https://github.com/statik1)<br/>**statik1** | [<img src=\"https://github.com/spignataro.png\" width=\"60\"/>](https://github.com/spignataro)<br/>**spignataro** | [<img src=\"https://github.com/Esturban.png\" width=\"60\"/>](https://github.com/Esturban)<br/>**Esturban** |\n| [<img src=\"https://github.com/prghbla.png\" width=\"60\"/>](https://github.com/prghbla)<br/>**prghbla** | [<img src=\"https://github.com/1re2turn1.png\" width=\"60\"/>](https://github.com/1re2turn1)<br/>**1re2turn1** | [<img src=\"https://github.com/aevnar.png\" width=\"60\"/>](https://github.com/aevnar)<br/>**aevnar** | [<img src=\"https://github.com/davdittrich.png\" width=\"60\"/>](https://github.com/davdittrich)<br/>**davdittrich** | [<img src=\"https://github.com/krsfer.png\" width=\"60\"/>](https://github.com/krsfer)<br/>**krsfer** |\n| [<img src=\"https://github.com/kantorcodes.png\" width=\"60\"/>](https://github.com/kantorcodes)<br/>**kantorcodes** | | | | |\n\n## License\n\n[AGPL-3.0](LICENSE)\n\n## Author\n\nBuilt by Farhan Palathinkal, [Cytostack](https://github.com/cytostack)\n","readmeFilename":"README.md"}