{"_id":"tokenleak","_rev":"20-5bb366391c3b6f64bc3dad8fd26917d4","name":"tokenleak","dist-tags":{"latest":"2.4.0"},"versions":{"0.1.0":{"name":"tokenleak","version":"0.1.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@0.1.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak.js"},"dist":{"shasum":"e009fde126ad1c57d7df2f1430b4ad7c8286731b","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-0.1.0.tgz","fileCount":3,"integrity":"sha512-pOmi9aX+8/kv0bY/XTfkRdg9fdajxPF9b9+mpEaRSO0jb6CbOMFVxu9TT44vAZruJAZBtjF4jfb75p39ETTEZA==","signatures":[{"sig":"MEYCIQCKRVfJvI38SyLHUIv+jEvDrd3Z4kJ5BHyL+0C3DfmiwAIhAM/TqzQ4CdCaMdlWcx06cq67eAWe15S5PcomB0i7AB3L","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80624},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"7c6442b8e35e7bb54d5f344f504efe3097245601","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_0.1.0_1773250509007_0.33306835118868316","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"tokenleak","version":"0.2.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@0.2.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak.js"},"dist":{"shasum":"4d82f1c80052612e9d198f74a81eb526d2b27c98","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-0.2.0.tgz","fileCount":3,"integrity":"sha512-Nibyybs4Ny6KMJs3lGgkc+hUs9psNzhQRI9w25UFX+j+c4nd3S5YAAIG6BLNlnpY15YaYTiIJDT8egIhB6keVA==","signatures":[{"sig":"MEUCIQC5z1m9RpJaMqZpngg1H8fiezgYm3uYYyMwykuwDx/VkAIgYp2Xsz5O3YOVOPIT/ZgAyR3hK2+BG7QQ9u8stfldua8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97995},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"2a8c276fadecf8c856179346ce02550b3d35b4ac","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_0.2.0_1773251427685_0.374657745154126","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"tokenleak","version":"0.3.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@0.3.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak.js"},"dist":{"shasum":"e611cd5ccf9f800160d5dc582af78ac41428bed5","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-0.3.0.tgz","fileCount":3,"integrity":"sha512-ZmzX0tas//jZleq6TFQk14na2Yzt79BSqhbqMvnq1t7Ock4YawhP3j6OBAxLSx8r4Xg/jt5OjoyKj7KMxts50A==","signatures":[{"sig":"MEUCIA9UTqD+AiY4ZX8oOCVhpMGXKFj3ZoegBnNpam81U8N2AiEA1ipBxpkXekKgVV+u1/xwAWSL/k1517ZhxoEjZ3m/aJ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98508},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"45ff2994111d83061e4383964701f5a3460841a9","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_0.3.0_1773253331543_0.5245364330045024","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"tokenleak","version":"0.4.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@0.4.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak.js"},"dist":{"shasum":"1bcb8042f10e0930397f523bac3613121d1ac7ee","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-0.4.0.tgz","fileCount":3,"integrity":"sha512-0nhXwGhD4/d6NBgApx+NGM2sD+GQJscQNydJ0jM1bW6frml9kAHsdELX4GNzSiXlyXCfGfcjy/MG7c/pAkvX9w==","signatures":[{"sig":"MEYCIQDmNagUn3EGiGM1px6+J9KxBH/Ks7JVNDPSNid0twZoPgIhAPOvCynVAfeZfl/Jntsz31QyZNUtTGt8pgciFCXjevD6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95861},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"6a3b0b4812ddfd872319809bb6cb99e96628eaa9","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_0.4.0_1773256793954_0.613492962838663","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"tokenleak","version":"0.4.1","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@0.4.1","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak.js"},"dist":{"shasum":"c84e01f5cd409f4db9acc61086168310f82183f0","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-0.4.1.tgz","fileCount":3,"integrity":"sha512-9zRft2S5kSjqForYfwT40TcNfomWq2ZF9LtUgD7LgeFbtOnCN4QzDkRMtdayyTxv8dZoyAwLALwnXaIwGuow9A==","signatures":[{"sig":"MEYCIQDNDa5mbz9LoCuDEIbowa5sW5OWAAN3Q7IcDFbjPNxk8gIhAPIZciBAZrI3X7xLtlx9J6B+6drVp5aX9+pwi7Hujf62","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96293},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"22da0f634ee65f3f3dddc12522978c4babfd2584","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_0.4.1_1773301218497_0.297206330118311","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"tokenleak","version":"0.5.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@0.5.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak.js"},"dist":{"shasum":"a245f65c7dea0b0208d11b3b24ff6f6c1bd70e3f","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-0.5.0.tgz","fileCount":3,"integrity":"sha512-l9XM9SnovoldfqA8k98Rv07VnTtESMZNGpyfr5hMuXP6z/y+f2puiEWuB9TAQGpDrVPqTo+9Sznayv5hSmIMCQ==","signatures":[{"sig":"MEUCIQDVlVnYAXhdsawqbhISy2Ipe3Exba4OVRlq+s1YdQO+HAIgLa8OAHlrz5YbApZ5H0TuzT8cxrx8LyfdTEJOFWjiwTQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":127536},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"27b89aaf794fe835bb3328754251321b558e5d7c","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_0.5.0_1773325166360_0.5578851487057288","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"tokenleak","version":"1.0.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@1.0.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak.js"},"dist":{"shasum":"f2fe2d851e1b1274a5147e72a06693ad20eafb60","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-1.0.0.tgz","fileCount":3,"integrity":"sha512-EWLnnldv0Ni9C4doSWigjcuw3OBkI/cLsdcD3AeZ0eaGDv5EbLsAN5Ctl1/EyYlNZgESVPVrx388XBIncoribA==","signatures":[{"sig":"MEYCIQCcqYlDFGpza009Fvj4ckkgpuAz09Ur7G5dDuebPII5TAIhAJJuq9aZ5k/FSaVSkfjlIRdhhU/w0/JbfyALjtZXiScU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129685},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"bdb5ec0027422f0835626d93dda0db894990e15c","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_1.0.0_1773326794500_0.9894525563581373","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"tokenleak","version":"1.0.1","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@1.0.1","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"3379aeb2abfd8050f8e32f53d6b068476e260770","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-1.0.1.tgz","fileCount":3,"integrity":"sha512-2GduYrGRoQKbQld5bOQUhVaDrTNLPP3+KsifU9gV3ZQLdhRYSDW1a012/wfXrgP8anFFlTG9xk4A0nxh8+8hFQ==","signatures":[{"sig":"MEUCIQCK3hVRUUNS+UpMLxULmYQqZo0lE75ofDFNfYN5BPW+YAIgUo34/kQk5N8/oIsUwXWKXytvkp5SejIYtZdtbqsGZq4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":142519},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"dbddb16b738436ff334bf26be234abe5c546c955","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_1.0.1_1773342007465_0.7144380531268473","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"tokenleak","version":"1.0.2","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@1.0.2","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"3261598b08f69a6585238382e9147b8ec82c73cb","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-1.0.2.tgz","fileCount":3,"integrity":"sha512-uU4t++VUlYFjk9DZiesBDlf9G3oNsQ2pvXlXS7TWs26RXsr2VTwpf7R9R6mnXRnwJE03ieGt1IzIR0XiNdxq9A==","signatures":[{"sig":"MEUCIQCUfSmBLZi+jlNt8sNWvn4fZ8s6nBWq5sp8dxfvpUjvFAIgf/WT5oGYp4Vy4RzOTGWTDnjdc0tMlOvkENXBBw6vaXM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141011},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"9dff0be1889a74aca55e22ed03591da0917bf993","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_1.0.2_1773425684425_0.23372682359346508","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"tokenleak","version":"1.1.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@1.1.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"de696df54a708a735d23a996a9e4b4804a08cf36","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-1.1.0.tgz","fileCount":3,"integrity":"sha512-/V8nhVMTjgiyFmRvKKUReqTJf/pX5YYFTH/4POL2l5zGP5K21bO8PA7dxi3qXfk47yIoRMvummqZdxRmf+oA5w==","signatures":[{"sig":"MEUCIQDY3+JdB8BDA6dWhlq36XqXQV+JjbBy3IBM6H59RLndEQIgLfCMqvdDLCdd0c/4SptaZ/PU6KKY352URn5L57No08c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":209457},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"69f4a59078c8cc68f80c2e3ba803510a23a7a599","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_1.1.0_1773475359668_0.014822671674971089","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"tokenleak","version":"1.1.1","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@1.1.1","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"21fc0db116046abf3b121a6c1f2a6022dfe37dc1","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-1.1.1.tgz","fileCount":3,"integrity":"sha512-x0CmcS27f0Ol2UmIZAymwbR3yQsooFlblZ1Qbv2V7Vh4Vzbw5n2F700nVewKY903x3ANKtmfzFfmmBmUrcH4pA==","signatures":[{"sig":"MEUCIQDy6W+hcpzBrJhvEk87Fcfiks9RNNCBcpb+R8EtbQnnXQIgPuauAfhGnNyJ1+VzrK5zV3o99OH7f8cT/eMYxiRontc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":255967},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"954e4cdff986154f883df232d45878b665d72879","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_1.1.1_1773491273318_0.15448664979208293","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"tokenleak","version":"1.2.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@1.2.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"04ef25ee9385e50290b467c874105b0da32ad303","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-1.2.0.tgz","fileCount":3,"integrity":"sha512-P+AMafk4yE+pyuuK7WESdbqjuaB3z0G2CHfnIlvpbn7GCFL66sae2ZgNwDlL6CcV8lmQBdywElpoHo0HpF5ikA==","signatures":[{"sig":"MEUCIBLnQ9Dp5joi8WQfljMJ1Ud2ZW2nuRgNVB2SuYGrbxCqAiEAhcNoCdTbpbCWBvPN7y4IFwE21w5Ly+gQGAAVvWe3iAk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":480358},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"5f9627f2bb639463a100b993badf26716061a544","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_1.2.0_1773599697143_0.6549226804287538","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"tokenleak","version":"1.3.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@1.3.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"91055bcf1e9b7e0ace72662e563b63e753a46b28","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-1.3.0.tgz","fileCount":3,"integrity":"sha512-FjLHBbaP3KcOYjfnQ5wdomm1An3N2rEUvzjXvvjTks8qTzEiTw0/22YGIVg8cvmZO2ssPABWfBNvHM5ixP6rng==","signatures":[{"sig":"MEUCIHGa1PuFLht8zci3Q7rK6FyZ9HfP+JLFsUQpSsnS0eLNAiEAnImQoXd7EXCipsBaOg3JwNspF65NNjn0UWEFDIa4l64=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":508480},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"37d061b3cbd12a52cd7d3c1cab79ac11dce7bd7e","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_1.3.0_1773944193172_0.12054755681929152","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"tokenleak","version":"2.0.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@2.0.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"82d49e5be03d24fd99e26ee67b16b25b2e923740","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-2.0.0.tgz","fileCount":3,"integrity":"sha512-eT9QONnfjyki2uF8BiArU4ttL09LxgbpW/IOOXnbvp1sGBuP3KsLqz/VpxFqPl2m2zlQswne+pnkIH/gczgfFg==","signatures":[{"sig":"MEQCIA6K9sOSF/JfiqHWlS9rrqZkfGMglN5/e42HIfSvTzCYAiB0E3Ph5aNeind6cJhozWsDtfWCSNBAM44ArH3MHx3qYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":675041},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"71dd75e40ede74a853a2447d1eecb9d321d96307","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0","@opentui/core":"^0.1.88"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_2.0.0_1774032331391_0.531698854745589","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"tokenleak","version":"2.1.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@2.1.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"91644c745ba6d1ec4b0315b6316a2666397343d8","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-2.1.0.tgz","fileCount":3,"integrity":"sha512-e6bdb6edXta8UkmWpem61FiOL5ptnf4LC0HQFCHNbXohQMVE9fQxd9IBtMgLghbFnNZAF32tQ6pYl8c7lAy/tQ==","signatures":[{"sig":"MEUCIQCA6XVaW5uddQ71YrGwKUZfZsXHCj0xLUUSHeq4Qea+ogIgGKfwnClbZqr5yAJq+QjRqqGK9ycwzaG3BA80zVdp02c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":709266},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"ac0caea83dc1439c9b4c03269d2740fbaf3fdc23","_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0","@opentui/core":"^0.1.88"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_2.1.0_1774682626406_0.1562396852070027","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"tokenleak","version":"2.1.1","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@2.1.1","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"4524db6a4a095086a836472fe0e8614caa7fdf60","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-2.1.1.tgz","fileCount":3,"integrity":"sha512-mRuM6ePgRQqGtkqJ/aRGzpsTOrjcQBPoOsk6gcXAxemWMv5NebdY6tpBGdH/XmSupRXOjEL5mGq91dNXy/Pdrw==","signatures":[{"sig":"MEYCIQC8aPSfuvGB/++sRFeThOv0nljxy5E1KtjWKJNq7e9cpQIhAL4sAVvBOyZIYUfzU2NFbi/PaE5JSLyTZ2DzHsc27qLu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1154139},"type":"module","engines":{"bun":">=1.0.0"},"_npmUser":{"name":"deva00","email":"yansh2017@gmail.com"},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"10.9.3","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"sharp":"^0.34.0","@opentui/core":"^0.1.88"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_2.1.1_1780384178456_0.17751093528744","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"tokenleak","version":"2.2.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@2.2.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"44a8b121ceae64dbc340a9fab165722efbf97b4a","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-2.2.0.tgz","fileCount":3,"integrity":"sha512-Djn/IJFfLSFswCZ9oj8CM2OzHBBCYMVU4Xrnow+YGuA5AX1nXupE9X1MaZjYnIc2pUENPOuTJHrKdMh4OjLxMw==","signatures":[{"sig":"MEYCIQDqi4HQ8AbNqQpOA1pdCfRVWiPNbGppxABKzEENI/4zwwIhAN5QjvTWEFol22//RVVsl4ZhMvG0e2D9/2r34qynCrKe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCzWxlpAVFOgsQfZmtosZjUtJ5D4F0XGC/pnU9GwGXZRQIhAKHrvtNl0W6yG7IQMPy+MiJRC42JQ8iq5wTXwHMOoDPn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tokenleak@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1218954},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"8c12aac8c63244acb29af456e9e7ad5159c95790","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e9f0e2b2-2437-4e13-b7a7-e6b01284c28b"}},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"11.19.0","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"sharp":"^0.34.0","@opentui/core":"^0.1.88"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_2.2.0_1788723642831_0.3762153114444433","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"tokenleak","version":"2.2.1","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@2.2.1","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"ff10691ce7e605ca757c170499bc3c4add2dd2ae","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-2.2.1.tgz","fileCount":3,"integrity":"sha512-4TBfko/nVJDKKoKGF/ICspe4i7eaDhVNwvNAHMMlpVJpr3RA0lxVjhTjZE9HsKmOdqPikl+iRBYxxdVfMDzQKA==","signatures":[{"sig":"MEUCIBMBNcqiUZjFoRuwJ5DpgxKvlZCMEDBx/2S5GT1SgK6IAiEA6UkLD2gdm+D8oZ4frnt//YCs/R5Aag5r79pA/Pap8o8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBnnvgcC9hXqAOVlTt9FF0cF8AYVf6T97LgYCR1nwILiAiEA70cJXHijmKYob8q+pF/n/elHXaFSrDxCRFf7Z17I8VE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tokenleak@2.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1226093},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"fd38fa290d7cd4e317b95401f42a4aa2f3779808","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e9f0e2b2-2437-4e13-b7a7-e6b01284c28b"}},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"11.19.0","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"24.20.0","dependencies":{"sharp":"^0.34.0","@opentui/core":"^0.1.88"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_2.2.1_1788817184418_0.21781386276907577","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"tokenleak","version":"2.3.0","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"author":{"name":"ya-nsh"},"license":"MIT","_id":"tokenleak@2.3.0","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"homepage":"https://github.com/ya-nsh/tokenleak#readme","bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"bin":{"tokenleak":"tokenleak"},"dist":{"shasum":"b2f3d8d44121c12b92f1b4031abe4868f2e0bb88","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-2.3.0.tgz","fileCount":3,"integrity":"sha512-2EuhZFY5eQsgsJJjo2XC2fyjV2dh4xANzJf32WADsW2pBMoHgJ+Ao0wvf3DzIRkRrVYNuZMXiF/rs9+CHXVCIg==","signatures":[{"sig":"MEYCIQCmFx8wp++B/FjqBG0l0pV0wKluMIS8UfH4SH5PwdvEFQIhAKflHygxSjjAz+6pwXUJuurYGWXCYnWQpxGrpAQKgt5T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCrPUchLjH9fRkOiWZqTcejo27RhtYv4r+GFjNOVEmuGgIhAPR2EECp221gI20BPgXwns+4c3g8i+5vfsaR9PS9pC3d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tokenleak@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1182072},"type":"module","engines":{"bun":">=1.0.0"},"gitHead":"a0ec8474804f21cd92abea79e004f7807b49a72f","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"e9f0e2b2-2437-4e13-b7a7-e6b01284c28b"}},"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"11.19.1","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"_nodeVersion":"24.22.1","dependencies":{"sharp":"^0.34.0","@opentui/core":"^0.1.88"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/tokenleak_2.3.0_1793686077940_0.9793908933875504","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"_id":"tokenleak@2.4.0","bin":{"tokenleak":"tokenleak"},"bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"dist":{"shasum":"f4ffd48fb8547ec588f7449b0c6221b2bf344c7f","tarball":"https://registry.npmjs.org/tokenleak/-/tokenleak-2.4.0.tgz","fileCount":3,"integrity":"sha512-pMB+I8OjYuI8GlYg7LwEjeVyJXvsrWJ1CU4WmXBMuXX4Cob46Xj2UI3xRMkHcZqsuHx3dpO6S5P+QvJrw9E5yg==","signatures":[{"sig":"MEYCIQCfKwvkjtmmeQbHiks0ULHo4SDI4UcJTRMiof2Sy+0TNwIhAMAUv52wL838fCVRGwb3Pqsn7mkm/ITQVJwR8dArVNu/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG9ELiRP2nSNZ4UI9UN5BrgrXxVKgRGkLyseJKUiM/wNAiBYO257oscVx5q0G8bowtWFvsIUf0hDpToU8Ul3P6+6xA=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/tokenleak@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1179711},"name":"tokenleak","type":"module","author":{"name":"ya-nsh"},"engines":{"bun":">=1.0.0"},"gitHead":"332a471b67499e9a7b5dbbbe9f3f9e334bf427bb","license":"MIT","version":"2.4.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"e9f0e2b2-2437-4e13-b7a7-e6b01284c28b"}},"homepage":"https://github.com/ya-nsh/tokenleak#readme","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"_npmVersion":"11.19.1","description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","directories":{},"maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"_nodeVersion":"24.22.1","dependencies":{"sharp":"^0.34.0","@opentui/core":"^0.1.88"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tokenleak_2.4.0_1793709380256_0.7581724042592991"}}},"time":{"created":"2026-03-11T17:35:08.941Z","modified":"2026-11-03T12:36:20.786Z","0.1.0":"2026-03-11T17:35:09.168Z","0.2.0":"2026-03-11T17:50:27.812Z","0.3.0":"2026-03-11T18:22:11.693Z","0.4.0":"2026-03-11T19:19:54.104Z","0.4.1":"2026-03-12T07:40:18.654Z","0.5.0":"2026-03-12T14:19:26.522Z","1.0.0":"2026-03-12T14:46:34.642Z","1.0.1":"2026-03-12T19:00:07.607Z","1.0.2":"2026-03-13T18:14:44.608Z","1.1.0":"2026-03-14T08:02:39.821Z","1.1.1":"2026-03-14T12:27:53.464Z","1.2.0":"2026-03-15T18:34:57.299Z","1.3.0":"2026-03-19T18:16:33.357Z","2.0.0":"2026-03-20T18:45:31.555Z","2.1.0":"2026-03-28T07:23:46.554Z","2.1.1":"2026-06-02T07:09:38.650Z","2.2.0":"2026-09-06T19:40:42.923Z","2.2.1":"2026-09-07T21:39:44.504Z","2.3.0":"2026-11-03T06:07:58.025Z","2.4.0":"2026-11-03T12:36:20.397Z"},"bugs":{"url":"https://github.com/ya-nsh/tokenleak/issues"},"author":{"name":"ya-nsh"},"license":"MIT","homepage":"https://github.com/ya-nsh/tokenleak#readme","keywords":["ai","tokens","usage","claude","codex","opencode","heatmap","dashboard","cli"],"repository":{"url":"git+https://github.com/ya-nsh/tokenleak.git","type":"git"},"description":"Visualise your AI coding-assistant token usage across providers — heatmaps, dashboards, and shareable cards.","maintainers":[{"name":"deva00","email":"yansh2017@gmail.com"}],"readme":"# Tokenleak\n\nSee where your AI tokens actually go. Tokenleak reads usage data from **Claude Code**, **Codex**, **Cursor**, **Gemini**, **GitHub Copilot**, **Amp**, **Codebuff**, **Droid**, **Qwen**, **Roo Code**, **Kilo Code**, **Kimi**, **Kilo CLI**, **Mux**, **Crush**, **OpenClaw**, **Hermes**, **Goose**, **Antigravity**, **Zed Agent**, **Kiro**, **Trae**, **Synthetic**, **Pi (`pi-mono`)**, and **OpenCode**, then renders terminal dashboards, heatmaps, compare reports, explain/focus reports, and shareable image cards from the CLI.\n\n![Tokenleak OpenTUI overview](./docs/tui-overview.png)\n\n## Overview\n\nTokenleak auto-detects supported providers from their local logs and storage. This is the quick scan of where it looks before it renders dashboards, reports, and images:\n\n| Icon | Client | Local data location | Provider key and aliases | Supported |\n| ---- | ------ | ------------------- | ------------------------ | --------- |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=claude.ai&sz=64\" alt=\"Claude Code icon\" /> | Claude Code | `~/.claude/projects/**/*.jsonl` | `claude-code`, `anthropic`, `claude`, `claudecode` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=openai.com&sz=64\" alt=\"Codex icon\" /> | Codex | `~/.codex/sessions/**/*.jsonl` | `codex`, `openai` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=cursor.com&sz=64\" alt=\"Cursor icon\" /> | Cursor | `~/.config/tokenleak/cursor-cache/usage*.csv` after `tokenleak cursor login` | `cursor`, `cursor-ide`, `cursoride` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=gemini.google.com&sz=64\" alt=\"Gemini icon\" /> | Gemini | `~/.gemini/tmp/**/*.{json,jsonl}` | `gemini`, `google` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://cdn.simpleicons.org/githubcopilot/000000\" alt=\"GitHub Copilot icon\" /> | GitHub Copilot | `~/.copilot/otel/**/*.jsonl` | `copilot`, `github-copilot`, `copilot-otel` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=ampcode.com&sz=64\" alt=\"Amp icon\" /> | Amp | `${XDG_DATA_HOME:-~/.local/share}/amp/threads/T-*.json` | `amp`, `sourcegraph-amp` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=codebuff.com&sz=64\" alt=\"Codebuff icon\" /> | Codebuff | `~/.config/manicode/projects/**/chats/**/chat-messages.json` | `codebuff`, `manicode` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=factory.ai&sz=64\" alt=\"Droid icon\" /> | Droid | `~/.factory/sessions/*.settings.json` | `droid`, `factory` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://avatars.githubusercontent.com/QwenLM?s=64\" alt=\"Qwen icon\" /> | Qwen | `~/.qwen/projects/**/*.jsonl` | `qwen` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://avatars.githubusercontent.com/RooCodeInc?s=64\" alt=\"Roo Code icon\" /> | Roo Code | `~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/tasks/**/ui_messages.json` | `roo-code`, `roo`, `roocode` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://avatars.githubusercontent.com/Kilo-Org?s=64\" alt=\"Kilo Code icon\" /> | Kilo Code | `~/.config/Code/User/globalStorage/kilocode.kilo-code/tasks/**/ui_messages.json` | `kilo-code`, `kilocode` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://avatars.githubusercontent.com/MoonshotAI?s=64\" alt=\"Kimi icon\" /> | Kimi CLI | `~/.kimi/sessions/**/wire.jsonl` | `kimi`, `kimi-cli` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://avatars.githubusercontent.com/Kilo-Org?s=64\" alt=\"Kilo CLI icon\" /> | Kilo CLI | `~/.local/share/kilo/kilo.db` | `kilo`, `kilo-cli` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=coder.com&sz=64\" alt=\"Mux icon\" /> | Mux | `~/.mux/sessions/**/session-usage.json` | `mux` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=crush.ai&sz=64\" alt=\"Crush icon\" /> | Crush | `${XDG_DATA_HOME:-~/.local/share}/crush/projects.json` project databases | `crush` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=openclaw.ai&sz=64\" alt=\"OpenClaw icon\" /> | OpenClaw | `~/.openclaw/agents/**/*.jsonl*` | `openclaw`, `open-claw` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://avatars.githubusercontent.com/NousResearch?s=64\" alt=\"Hermes icon\" /> | Hermes | `${HERMES_HOME:-~/.hermes}/state.db` | `hermes`, `hermes-agent` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=block.github.io&sz=64\" alt=\"Goose icon\" /> | Goose | `${XDG_DATA_HOME:-~/.local/share}/goose/sessions/sessions.db` | `goose` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=antigravity.google&sz=64\" alt=\"Antigravity icon\" /> | Antigravity | `~/.config/tokenleak/antigravity-cache/sessions/*.jsonl` cache | `antigravity` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=zed.dev&sz=64\" alt=\"Zed icon\" /> | Zed Agent | `${XDG_DATA_HOME:-~/.local/share}/zed/threads/threads.db` | `zed`, `zed-agent` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=kiro.dev&sz=64\" alt=\"Kiro icon\" /> | Kiro | `~/.kiro/sessions/cli/*.json` | `kiro` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=trae.ai&sz=64\" alt=\"Trae icon\" /> | Trae | `~/.config/tokenleak/trae-cache/sessions/*.json` cache | `trae` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://www.google.com/s2/favicons?domain=synthetic.new&sz=64\" alt=\"Synthetic icon\" /> | Synthetic | `~/.local/share/octofriend/sqlite.db` | `synthetic`, `octofriend` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://opencode.ai/favicon.ico\" alt=\"OpenCode icon\" /> | OpenCode | `~/.local/share/opencode/storage/message/<session>/*.json` or `~/.config/opencode/storage/message/<session>/*.json`<br />Legacy: `~/.opencode/opencode.db`, `~/.opencode/sessions.db`, `~/.opencode/sessions/*.json` | `open-code`, `opencode`, `open_code` | Yes |\n| <img width=\"36\" height=\"36\" src=\"https://pi.dev/logo.svg\" alt=\"Pi icon\" /> | Pi (`pi-mono`) | `~/.pi/agent/sessions/**/*.jsonl` | `pi`, `pi-mono` | Yes |\n\n- Use `CLAUDE_CONFIG_DIR` to override the Claude Code base directory.\n- Use `CODEX_HOME` to override the Codex base directory.\n- Use `TOKENLEAK_CURSOR_DIR` to override the Cursor credentials/cache directory.\n- Use `TOKENLEAK_GEMINI_DIR`, `TOKENLEAK_COPILOT_OTEL_DIR`, `TOKENLEAK_AMP_DIR`, `TOKENLEAK_CODEBUFF_DIR`, `TOKENLEAK_DROID_DIR`, `TOKENLEAK_QWEN_DIR`, `TOKENLEAK_ROO_CODE_DIR`, `TOKENLEAK_KILO_CODE_DIR`, `TOKENLEAK_KIMI_DIR`, `TOKENLEAK_KILO_DIR`, `TOKENLEAK_MUX_DIR`, `TOKENLEAK_CRUSH_DIR`, `TOKENLEAK_OPENCLAW_DIR`, `TOKENLEAK_HERMES_DIR`, `TOKENLEAK_GOOSE_DIR`, `TOKENLEAK_ANTIGRAVITY_DIR`, `TOKENLEAK_ZED_DIR`, `TOKENLEAK_KIRO_DIR`, `TOKENLEAK_TRAE_DIR`, and `TOKENLEAK_SYNTHETIC_DIR` to override provider data locations.\n- Hermes also honors `HERMES_HOME`.\n- Use `PI_CODING_AGENT_DIR` to override the Pi base directory.\n- See [Provider details](#provider-details) for the parser behavior and per-provider notes.\n\n## Install\n\nInstall Tokenleak with the package manager you already use:\n\nTokenleak requires Bun on your `PATH`, including when installed with npm. Run `bun --version` first; release validation uses Bun 1.3.10.\n\n```bash\n# Bun\nbun install -g tokenleak\n\n# npm\nnpm install -g tokenleak\n\n# Run without a global install\nbunx tokenleak --help\nnpx tokenleak --help\n```\n\nAfter installing, run `tokenleak` in your terminal. It auto-detects supported providers from their local logs.\nIn an interactive TTY, plain `tokenleak` launches a full-screen TUI dashboard with six groups. Press `1`–`6` to pick a group, and press the same key again to step through its tabs:\n\n1. **Overview**\n   - **Overview**: heatmap, stats, providers, and top models\n   - **Quotas**: live subscription limits for Claude, Codex, and Copilot\n2. **Spend**\n   - **Matrix**: a 4-page deep dive with activity patterns, cache economics, sessions, model efficiency, attribution, and cache ROI by model\n   - **Compare**: side-by-side period comparison with deltas\n3. **Sessions**\n   - **Focus**: deep-work session rankings scored by active time (breaks over 30 min excluded), density, and streaks\n   - **Replay**: chronological session timeline with flow blocks, pulse chart, and flow/think ratio\n   - **Explain**: narrative day-by-day usage breakdown\n4. **Savings**\n   - **Advisor**: savings recommendations with the projected monthly bill\n   - **Waste**: the same savings findings as an evidence table\n   - **Routing**: what routing short tasks to cheaper models would have saved\n   - **Receipts**: itemized spend by prompt behavior\n5. **ROI**\n   - **AI ROI**: token spend versus local Git output, including commits, changed lines, and cost/token ratios per repo\n   - **Diff**: compare providers, models, or projects side by side\n6. **Share**\n   - **Export**: save PNG or Wrapped PNG, open AI Wrapped in the browser, or copy an LLM-ready analysis prompt\n   - **Wrapped**: Spotify-Wrapped-style stats card with achievements and usage breakdown\n\nThe second header row lists the active group's tabs. On its right is a compact quota widget, such as `Quota Claude 42% · Codex 90%`, showing each provider's tightest window from the last quota check. It never checks quotas on its own; open the Quotas tab (`U`) to refresh. On narrow terminals the group bar shows the groups around the active one (`‹` / `›` mark the rest) and footer hints drop by priority, so `q:quit` and `?:keys` are always visible.\n\n\n### From source\n\n```bash\ngit clone https://github.com/ya-nsh/tokenleak.git\ncd tokenleak\nbun install\nbun run build\nbun run bundle\n\n# Run directly\nbun dist/tokenleak\n```\n\nIf an existing global launcher points to a missing file, reinstall using the same package manager (`bun install -g tokenleak --force` or `npm install -g tokenleak --force`), then check `tokenleak --version`. If the launcher reports that Bun cannot be found, add Bun's bin directory to your shell's `PATH`.\n\nMaintainers can run `bun run prepublish && bun run verify:package` to build, pack, install, and exercise the actual npm package in an isolated temporary directory without publishing it.\n\n## Usage\n\n```bash\n# Open the TUI dashboard (TTY only)\ntokenleak\n\n# Skip the TUI and render directly with flags\ntokenleak --format terminal\n\n# Serve the dashboard, AI Wrapped and replay pages from one local server\ntokenleak serve\ntokenleak serve --days 365 --open\n\n# Output as JSON\ntokenleak --format json\n\n# Export an SVG heatmap\ntokenleak --format svg --output usage.svg\n\n# Export a PNG image\ntokenleak --format png --output usage.png\n\n# Export anonymized aggregate data or an LLM-ready analysis prompt\ntokenleak commons export --days 90 --output commons.json\ntokenleak commons prompt --days 90 --clipboard\ntokenleak commons prompt --provider claude,codex --output tokenleak-llm-prompt.md\n\n# Generate your AI Coding Wrapped story card\ntokenleak --format wrapped\ntokenleak --format wrapped --theme light --output my-wrapped.png --open\n\n# Launch the interactive AI Wrapped presentation in a browser (same server, /wrapped)\ntokenleak --wrapped-live\ntokenleak --wrapped-live --days 365\n\n# Get model efficiency recommendations\ntokenleak --advisor\ntokenleak --advisor --days 30 --claude\n\n# Save to a file (format is inferred from the extension)\ntokenleak -o report.json\ntokenleak -o heatmap.svg\ntokenleak -o card.png\n\n# Explain one day's usage (dates also accept \"today\" and \"yesterday\")\ntokenleak explain 2026-03-10\ntokenleak explain yesterday\ntokenleak explain 2026-03-10 --format json\n\n# Replay a day's session timeline\ntokenleak replay\ntokenleak replay 2026-03-10 --format json\n\n# Open the interactive replay scrub UI in your browser\ntokenleak replay 2026-03-10 --interactive\n\n# Rank deep-work sessions\ntokenleak focus\ntokenleak focus --provider codex --days 30\n\n# Compare AI token spend against local Git output\ntokenleak nutrition\ntokenleak nutrition --days 30 --format json\n\n# Optimization intelligence\ntokenleak simulate-routing --days 30\ntokenleak waste --severity high\ntokenleak behavior-diff --provider claude-code,codex --days 30 --format json\n\n# Authenticate Cursor and sync its local cache\ntokenleak cursor login --name work\n\n# See every model's rates and where each price came from\ntokenleak pricing\n\n# One-line spend summary for your editor or tmux status bar\ntokenleak statusline\n\n# Show registered providers, availability, and aliases\ntokenleak --list-providers\n```\n\n### Analysis commands\n\nTokenleak ships dedicated investigation and optimization commands in addition to the main dashboard flow:\n\n```bash\n# Explain what drove a specific day\ntokenleak explain 2026-03-10\n\n# Emit the explain report as JSON\ntokenleak explain 2026-03-10 --format json --output explain.json\n\n# Rank sessions by deep-work score\ntokenleak focus --days 30\n\n# Focus report as JSON\ntokenleak focus --format json --provider pi --output focus.json\n\n# Replay today's session timeline\ntokenleak replay\n\n# Replay a specific day with JSON output\ntokenleak replay 2026-03-10 --format json --output replay.json\n\n# Open the day in an interactive browser scrub UI\ntokenleak replay 2026-03-10 --interactive\ntokenleak replay 2026-03-10 --interactive --open --port 4567\n\n# Estimate AI ROI from token usage and local Git output\ntokenleak nutrition --days 30\n\n# Emit the AI ROI report as JSON\ntokenleak nutrition --format json --output ai-roi.json\n\n# Estimate savings from model routing\ntokenleak simulate-routing --days 30\n\n# Detect agent waste signals with evidence and recipes\ntokenleak waste --days 30\n\n# Compare two agent/provider/model cohorts\ntokenleak behavior-diff --provider claude-code,codex --days 30\n```\n\n- `tokenleak explain <date>` builds a narrative day report with top providers, sessions, projects, models, and anomaly flags.\n- `tokenleak focus` ranks sessions by a deep-work score derived from active time, token density, and project streak. Active time skips gaps over 30 minutes (or uses provider-reported turn durations), and density needs at least 10 active minutes.\n- `tokenleak replay [date]` shows a chronological timeline of all sessions for a day, clustering events into flow blocks with a pulse chart and flow/think ratio. Defaults to today. Pass `--interactive` (or `-i`) to open a browser scrub UI at `/replay` on the [local live server](#live-server) — drag the timeline, press space to play the day at 60–600× speed, watch the cumulative cost odometer tick up. Combine with `--open` to launch the browser automatically.\n- `tokenleak nutrition` powers the TUI **AI ROI** view. It resolves local Git repo roots from provider project paths, runs read-only `git log --numstat`, and reports tokens/cost per commit and changed line. `No Git signal` means Tokenleak saw AI usage for a repo path but found no commits in the selected date window; switch to a wider window or ensure the project path exists locally as a Git worktree.\n- `tokenleak simulate-routing` re-prices historical events under conservative downgrade rules so pro users can estimate savings before changing model habits or team guidance.\n- `tokenleak waste` lists the savings findings with evidence: cheaper-model routes, cache misses and unreused writes, growing context, repeated prompt clusters, model churn, low-yield sessions, and spend patterns.\n- `tokenleak behavior-diff` compares cohorts such as provider-vs-provider or model-vs-model and emits deterministic takeaways for engineering teams.\n\n### Status line\n\n`tokenleak statusline` prints one line for editor and terminal status bars:\n\n```text\n$42.10 today (120M) · $836 7d · 14d streak\n```\n\nIt reads only the cached logs (no network, no Cursor sync), so it is fast enough to refresh on every prompt. Use it as your Claude Code status line in `~/.claude/settings.json`:\n\n```json\n{ \"statusLine\": { \"type\": \"command\", \"command\": \"tokenleak statusline\" } }\n```\n\nor in tmux: `set -g status-right '#(tokenleak statusline --no-color)'`. `--format json` returns the numbers behind the line.\n\n### Cursor commands\n\nUse these commands to manage Cursor authentication and the local cache that Tokenleak reads:\n\n```bash\ntokenleak cursor login --name work\ntokenleak cursor status\ntokenleak cursor accounts --json\ntokenleak cursor doctor\ntokenleak cursor switch work\ntokenleak cursor logout --name work\ntokenleak cursor logout --all --purge-cache\ntokenleak cursor reset\n```\n\n- Getting a Cursor session token:\n\n  The exact browser wording may vary, but the reliable source of truth is the `WorkosCursorSessionToken` cookie:\n\n  1. Open Cursor and sign in.\n  2. Open `https://www.cursor.com/settings`.\n  3. Open your browser developer tools.\n  4. Go to `Application` (or `Storage`) -> `Cookies` -> `https://www.cursor.com`.\n  5. Copy the value of the `WorkosCursorSessionToken` cookie.\n  6. Paste that token into `tokenleak cursor login --name <label>` when prompted, or into the TUI setup modal after pressing `c`.\n\n- Local checkout flow:\n\n```bash\n# Build once from the repo root\nbun install\nbun run build\n\n# Validate the saved Cursor session token\nbun packages/cli/dist/cli.js cursor status\n\n# Trigger the first Cursor cache sync and show Cursor-only usage\nbun packages/cli/dist/cli.js --provider cursor --format terminal\n\n# Inspect raw Cursor data\nbun packages/cli/dist/cli.js --provider cursor --format json\n```\n\n- Normal dashboard/report runs auto-refresh Cursor cache when you are logged in and Cursor is requested or available.\n- If refresh fails but cached CSVs exist, Tokenleak falls back to the cached data.\n- `tokenleak cursor status` only validates the saved session token. It does not mark Cursor as available by itself.\n- `tokenleak cursor reset` clears saved Cursor credentials and the local Cursor cache so you can re-test the in-TUI setup flow from a clean state.\n- `tokenleak --list-providers` reports whether local provider data exists. For Cursor, that means `cursor-cache/usage*.csv` must already be present.\n- If `cursor status` is valid but `--list-providers` still shows Cursor as unavailable, run `tokenleak --provider cursor` once to sync the cache, then rerun `--list-providers`.\n- Cursor session tokens are stored in plaintext at `~/.config/tokenleak/cursor-credentials.json` (or under `TOKENLEAK_CURSOR_DIR`) with local-only file permissions.\n\n#### Corporate VPN / protected network\n\nIf `tokenleak cursor login` works off VPN but fails on a company protected VPN with a connection, proxy, or certificate error, run the token-free doctor first:\n\n```bash\ntokenleak cursor doctor\n```\n\nFor managed proxy networks, pass a Cursor-specific proxy or use your standard shell proxy variables:\n\n```bash\nTOKENLEAK_CURSOR_PROXY=http://proxy.company:8080 tokenleak cursor doctor\n```\n\nFor TLS inspection networks, export the company root CA as a PEM file and point Tokenleak at it:\n\n```bash\nTOKENLEAK_CURSOR_CA_FILE=/path/company-root-ca.pem tokenleak cursor doctor --with-token\n```\n\nTokenleak also honors `HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY`, and `TOKENLEAK_CURSOR_TIMEOUT_MS` for Cursor API requests. `tokenleak cursor doctor --insecure-skip-tls-verify` exists only to prove that TLS inspection is the failure mode; do not use it for normal login or sync.\n\n### Date filtering\n\nBy default, Tokenleak shows the last **90 days** of usage.\n\n```bash\n# Last 30 days\ntokenleak --days 30\n\n# Specific date range\ntokenleak --since 2025-06-01 --until 2025-12-31\n\n# Everything since a date (until defaults to today)\ntokenleak --since 2025-01-01\n\n# --since takes priority over --days when both are provided\n```\n\n### Provider filtering\n\nTokenleak auto-detects all installed providers. You can filter to specific ones:\n\n```bash\n# Only Claude Code\ntokenleak --provider claude-code\n\n# Only Codex\ntokenleak --provider codex\n\n# Only Cursor\ntokenleak --provider cursor\n\n# Only Pi\ntokenleak --provider pi\n\n# Multiple providers (comma-separated)\ntokenleak --provider claude-code,codex,cursor,pi\n\n# Provider aliases are supported too\ntokenleak --provider anthropic,openai,cursor-ide,pi-mono\n\n# Shortcut flags\ntokenleak --claude\ntokenleak --codex\ntokenleak --cursor\ntokenleak --pi\ntokenleak --open-code\n\n# Ignore all provider filters and use every available provider\ntokenleak --all-providers\n```\n\n### Compare mode\n\nCompare your usage across two time periods to see how your token consumption has changed:\n\n```bash\n# Auto-compare: splits your selected date range in half\n# (for example, --days 60 compares the last 30 days against the previous 30 days)\ntokenleak --compare auto\n\n# Compare against a specific previous period\ntokenleak --compare 2025-01-01..2025-03-31\n\n# JSON compare output contains periodA, periodB, and deltas\ntokenleak --compare auto --format json\n\n# Compare cards for images use expanded stats automatically\ntokenleak --compare auto --format png --output compare.png\n```\n\nCompare mode compares the current selection against an earlier period and reports deltas for tokens, cost, streaks, active days, average daily tokens, and cache hit rate.\nWhen you use `--format json`, the output shape is `periodA`, `periodB`, and `deltas`.\nWhen you use `--format png` or `--format svg`, Tokenleak enables expanded compare cards automatically.\n\n### AI Coding Wrapped\n\nGenerate a Spotify-Wrapped-style story card as a tall PNG image showing your AI coding stats, streaks, model usage, habits, achievements, and more.\n\nCurrent wrapped card generated from the latest Tokenleak build:\n\n![Tokenleak AI Wrapped card](./docs/wrapped-card.png)\n\n```bash\n# Generate your wrapped card (dark theme, opens automatically)\ntokenleak --format wrapped --open\n\n# Light theme, custom output path\ntokenleak --format wrapped --theme light --output my-wrapped.png\n\n# Specific date range\ntokenleak --format wrapped --since 2025-01-01 --until 2025-12-31\n```\n\nThe wrapped card includes 12 sections: title, big numbers, streak story, top model donut chart, provider mix, day-of-week bars, time-of-day distribution, cache efficiency gauge, peak day spotlight, earned achievements, monthly burn projection, and footer.\n\nAchievements are computed from your actual data — earn badges like Streak Master (30+ day streak), Cache Master (>50% hit rate), Night Owl (>40% usage 10pm-6am), Power User (>10k avg daily tokens), and more.\n\nThe TUI dashboard includes a Wrapped view (press `8` or arrow to it).\n\n### Wrapped Live\n\nLaunch the AI Wrapped as an interactive 12-slide presentation in your browser with smooth transitions, keyboard/swipe navigation, and progress dots:\n\n```bash\n# Start the live server and announce the Wrapped deck (localhost:3333/wrapped)\ntokenleak --wrapped-live\n\n# With a full year of data\ntokenleak --wrapped-live --days 365 --claude\n\n# Filter to specific providers\ntokenleak --wrapped-live --provider claude-code,codex\n```\n\n`tokenleak --format wrapped` is the static export path: it writes a tall PNG you can attach to docs, posts, or issues. `tokenleak --wrapped-live` uses the same underlying stats, but serves them as a browser deck that is better for demos, screenshares, and walking through each section interactively.\n\nWrapped Live is the `/wrapped` page of the [local live server](#live-server), which starts on `http://localhost:3333` and moves to the next free port if `3333` is taken. The presentation uses the same 12 sections as the static wrapped card but rendered as navigable slides with an obsidian-and-gold design. Use arrow keys, click the nav buttons, or swipe on touch devices to move between slides.\n\n### Savings advisor\n\nOne savings engine produces every recommendation. `--advisor`, `tokenleak waste`, the TUI Advisor and Waste views, and the MCP `get_efficiency_advice` and `get_agent_waste` tools are all views of the same report:\n\n```bash\n# Run the advisor (last 90 days by default)\ntokenleak --advisor\n\n# Analyze last 30 days, Claude Code only\ntokenleak --advisor --days 30 --claude\n```\n\n- **Model routing** — events the routing simulator re-priced on a cheaper sibling model (short outputs, quick lookups), grouped per model route. The savings are the per-event re-pricing, the same numbers `tokenleak simulate-routing` lists event by event.\n- **Cache** — per-provider low hit rates, priced at that provider's own input and cache-read rates, and cache writes that are never read back\n- **Sessions** — context that keeps growing, repeated prompt clusters, model churn, and long sessions with low output per dollar\n- **Spend patterns** — one model above 85% of spend, a rising cost trend, and burst days. These carry no savings estimate; they point at where to look.\n\nEach recommendation has a severity, a confidence level, evidence, savings over the window and per month where they can be estimated, and a recipe for what to try next. Findings can overlap, so the total is capped at your current cost. `--advisor` shows the projected monthly bill; `tokenleak waste` shows the evidence table and filters with `--severity`. Both print the same JSON with `--format json`.\n\n### Themes\n\n```bash\n# Dark theme (default)\ntokenleak --theme dark\n\n# Light theme\ntokenleak --theme light\n```\n\n### Terminal options\n\n```bash\n# Set terminal width (affects heatmap and dashboard layout)\ntokenleak --width 120\n\n# Disable ANSI colours (useful for piping output)\ntokenleak --no-color\n\n# Hide the insights panel\ntokenleak --no-insights\n\n# Add expanded analytics to terminal/image/json output\ntokenleak --more\n\n# Show every skipped log entry and sync detail (works with any command)\ntokenleak --verbose\n```\n\nTerminal output follows your terminal: width defaults to the terminal's columns (40–140), and color is used only when stdout is a TTY. Piped or redirected output is plain text. `NO_COLOR=1` disables color everywhere; `FORCE_COLOR=1` keeps it when piping.\n\nUnknown or misspelled flags fail with exit code 1 and suggest the closest flag, so `tokenleak --day 30` no longer silently shows 90 days.\n\nWith `--more`, Tokenleak surfaces:\n\n- model efficiency scoring with transparent component breakdowns\n- prompt-cache ROI analysis by provider, model, and project\n- session and project drill-down tables\n- attribution clusters that group work by repo/directory and time window\n\n### Sharing\n\n```bash\n# Copy rendered output to clipboard\ntokenleak --format json --clipboard\n\n# Open the output file in your default application after saving\ntokenleak -o usage.svg --open\n\n# If no output path is provided for json/svg/png, Tokenleak uses tokenleak.<format>\ntokenleak --format png --open\n\n# Upload to a secret GitHub Gist (requires gh CLI to be authenticated)\ntokenleak --format json --upload gist\n\n# Keep captured prompt text in JSON exports (omitted by default)\ntokenleak --format json --include-prompts -o usage-with-prompts.json\n```\n\nJSON exports (files, `--clipboard`, `--upload gist`) omit captured prompt text by default, because prompts often contain pasted secrets and private code. Prompt IDs are kept so turns still group. Gists are created **secret** (unlisted): anyone with the link can open them, but they are not listed on your profile or in search.\n\n## Interactive modes\n\n### TUI dashboard (default)\n\nIn a real TTY, `tokenleak` launches a full-screen terminal dashboard built with [@opentui/core](https://www.npmjs.com/package/@opentui/core). Its 15 views are grouped into six tabs with keyboard and mouse navigation (see the list above). The Advisor and Waste tabs show the same savings report.\n\nLatest OpenTUI screenshots from the current dashboard build:\n\n| Overview | Matrix (page 4) |\n| --- | --- |\n| ![Overview view](./docs/tui-overview.png) | ![Matrix view](./docs/tui-matrix.png) |\n| Advisor | Focus |\n| ![Advisor view](./docs/tui-advisor.png) | ![Focus view](./docs/tui-focus.png) |\n| Explain | Compare |\n| ![Explain view](./docs/tui-explain.png) | ![Compare view](./docs/tui-compare.png) |\n| Export | Wrapped |\n| ![Export view](./docs/tui-export.png) | ![Wrapped view](./docs/tui-wrapped.png) |\n\n| Key | Action |\n| --- | --- |\n| `1`–`6` | Switch group: Overview, Spend, Sessions, Savings, ROI, Share |\n| `1`–`6` again | Next tab in the current group |\n| `←` / `→` | Previous/next tab, crossing into the next group |\n| `U` `R` `X` `Y` `Z` | Jump to Quotas, Receipts, Routing, Waste, or Diff |\n| `Tab` / `>` | Next time period (1D → 7D → 30D → 90D → ALL) |\n| `Shift+Tab` / `<` | Previous time period |\n| `j` / `k` | Scroll up/down in scrollable views |\n| `[` / `]` | Matrix page navigation (in Matrix view) |\n| `h` / `l` | Previous/next day (in Explain view) |\n| `s` | Toggle sort mode (in Overview) |\n| `r` | Refresh data |\n| `c` | Open Cursor setup when the dashboard shows a Cursor auth/sync banner |\n| `?` | Help overlay |\n| `q` | Quit |\n\nWhen Cursor needs setup, re-authentication, or a cache retry, the TUI shows a contextual banner. Press `c` to open the built-in Cursor setup flow, paste a session token, validate it, and sync usage CSVs without leaving the dashboard.\n\nThe Matrix view spans 4 pages:\n1. Overview + time windows + providers + top models\n2. Hour-of-day, day-of-week, I/O breakdown, monthly burn\n3. Cache economics, cache ROI, session metrics, top projects\n4. Model efficiency, attribution clusters, top sessions, cache ROI by model\n\n### Live server\n\n`tokenleak serve` starts one local web server with every browser view:\n\n| Page | What it shows | Older shortcut |\n| --- | --- | --- |\n| `/dashboard` | Interactive usage dashboard | `tokenleak --live-server` |\n| `/wrapped` | AI Wrapped presentation | `tokenleak --wrapped-live` |\n| `/replay?date=YYYY-MM-DD` | Session replay with a 90-day heatmap | `tokenleak replay --interactive` |\n\n`/` links every page, and `/api/replay?date=YYYY-MM-DD` returns one day's replay as JSON. The server listens on `127.0.0.1` only. It starts on port `3333` (override with `--port`, or `--port 0` for any free port) and moves to the next free port if that one is taken. `--open` opens the dashboard in your browser.\n\nThe older shortcuts still work. Each one starts the same server and lists its own page first. In the TUI, `o` (replay) and `l` in the Export view (AI Wrapped) share one in-process server, too.\n\n## All flags\n\nWhen you run bare `tokenleak` in a real terminal, the TUI dashboard launches. Pass flags to skip the TUI and render directly.\n\nSubcommands:\n\n- `tokenleak explain <date>` supports `--format terminal|json`, `--output`, `--width`, and the standard provider filters.\n- `tokenleak focus` supports `--format terminal|json`, `--output`, `--width`, and the standard provider/date filters.\n- `tokenleak commons export` writes anonymized aggregate JSON; `tokenleak commons prompt` writes or copies a Markdown prompt for external LLM analysis; `tokenleak commons inspect <file>` validates a commons JSON export before sharing.\n- `tokenleak replay [date]` supports `--format terminal|json`, `--output`, `--width`, and the standard provider filters. Date defaults to today. Add `-i`/`--interactive` to open the `/replay` page of the local live server (port 3333; override with `--port`); add `--open` to auto-open the browser. `--format`, `--output`, and `--width` are ignored in interactive mode.\n- `tokenleak serve` supports `--port`, `--open`, `--theme`, and the standard provider/date filters. See [Live server](#live-server).\n- `tokenleak cursor --help` prints the Cursor auth/cache command help text.\n- `tokenleak explain --help`, `tokenleak focus --help`, `tokenleak commons --help`, and `tokenleak replay --help` print the subcommand-specific help text.\n\n| Flag | Alias | Default | Description |\n| --- | --- | --- | --- |\n| `--format` | `-f` | `terminal` | Output format: `json`, `svg`, `png`, `terminal`, `wrapped` |\n| `--theme` | `-t` | `dark` | Theme for `png`, `svg`, and live output: `dark`, `light` |\n| `--since` | `-s` |  | Start date (`YYYY-MM-DD`). Overrides `--days` |\n| `--until` | `-u` | today | End date (`YYYY-MM-DD`) |\n| `--days` | `-d` | `90` | Number of trailing days to include |\n| `--output` | `-o` | stdout | Output path. Format is inferred from the file extension when possible |\n| `--width` | `-w` | `80` | Terminal render width |\n| `--provider` | `-p` | auto | Filter to specific provider(s), comma-separated |\n| `--claude` |  | `false` | Shortcut for `--provider claude-code` |\n| `--codex` |  | `false` | Shortcut for `--provider codex` |\n| `--cursor` |  | `false` | Shortcut for `--provider cursor` |\n| `--pi` |  | `false` | Shortcut for `--provider pi` |\n| `--open-code` |  | `false` | Shortcut for `--provider open-code` |\n| `--all-providers` |  | `false` | Ignore provider filters and use every available provider |\n| `--list-providers` |  | `false` | Show registered providers, aliases, and availability |\n| `--compare` |  |  | Compare against `auto` or `YYYY-MM-DD..YYYY-MM-DD` |\n| `--more` |  | `false` | Add expanded PNG/SVG stats and include extra summary data in JSON output |\n| `--clipboard` |  | `false` | Copy rendered output to the system clipboard |\n| `--open` |  | `false` | Open the rendered file in the default app |\n| `--upload` |  |  | Upload output to a service. Supported: `gist` |\n| `--live-server` | `-L` | `false` | Alias for `tokenleak serve`, announcing the dashboard |\n| `--wrapped-live` |  | `false` | Alias for `tokenleak serve`, announcing AI Wrapped |\n| `--advisor` |  | `false` | Show the savings report as advice with the projected monthly bill |\n| `--no-color` |  | `false` | Strip ANSI escape codes from terminal output |\n| `--no-insights` |  | `false` | Hide terminal insights |\n| `--version` |  |  | Print version information |\n| `--help` |  |  | Print usage information |\n\n## Provider details\n\n### Claude Code\n\nReads JSONL conversation logs from the Claude Code projects directory. Each assistant message with a `usage` field is parsed for input/output/cache token counts.\n\n|                   |                                              |\n| ----------------- | -------------------------------------------- |\n| **Data location** | `~/.claude/projects/**/*.jsonl`              |\n| **Override**      | Set `CLAUDE_CONFIG_DIR` environment variable |\n| **Provider name** | `claude-code`                                |\n| **Aliases**       | `anthropic`, `claude`, `claudecode`          |\n\n### Codex\n\nReads JSONL session logs from the Codex sessions directory. Parses `response` events for token usage with cumulative delta extraction.\n\n|                   |                                       |\n| ----------------- | ------------------------------------- |\n| **Data location** | `~/.codex/sessions/**/*.jsonl`        |\n| **Override**      | Set `CODEX_HOME` environment variable |\n| **Provider name** | `codex`                               |\n| **Aliases**       | `openai`                              |\n\n### Cursor\n\nReads Cursor usage CSV exports from the local Tokenleak cache. The cache is populated by authenticating with `tokenleak cursor login`, after which normal runs auto-refresh the CSVs when possible.\n\n`tokenleak cursor status` confirms that your saved session token is valid. Cursor only becomes `[available]` in `tokenleak --list-providers` after the local cache has at least one `usage*.csv` file, usually after the first `tokenleak --provider cursor` run.\n\n|                   |                                                       |\n| ----------------- | ----------------------------------------------------- |\n| **Data location** | `~/.config/tokenleak/cursor-cache/usage*.csv`         |\n| **Override**      | Set `TOKENLEAK_CURSOR_DIR` environment variable       |\n| **Provider name** | `cursor`                                              |\n| **Aliases**       | `cursor-ide`, `cursoride`                             |\n\n### Gemini\n\nReads Gemini CLI session JSON, chat JSON, and JSONL usage records from the local Gemini temp directory.\n\n|                   |                                                             |\n| ----------------- | ----------------------------------------------------------- |\n| **Data location** | `~/.gemini/tmp/**/*.{json,jsonl}`                           |\n| **Override**      | Set `TOKENLEAK_GEMINI_DIR` environment variable             |\n| **Provider name** | `gemini`                                                    |\n| **Aliases**       | `google`                                                    |\n\n### GitHub Copilot\n\nReads local Copilot OTEL JSONL spans and counts chat spans with `gen_ai.usage.*` token attributes.\n\n|                   |                                                                 |\n| ----------------- | --------------------------------------------------------------- |\n| **Data location** | `~/.copilot/otel/**/*.jsonl`                                    |\n| **Override**      | Set `TOKENLEAK_COPILOT_OTEL_DIR` environment variable           |\n| **Provider name** | `copilot`                                                       |\n| **Aliases**       | `github-copilot`, `copilot-otel`                                |\n\n### Amp\n\nReads Sourcegraph Amp thread JSON files and combines usage ledger rows with message-level usage without double-counting matching entries.\n\n|                   |                                                                  |\n| ----------------- | ---------------------------------------------------------------- |\n| **Data location** | `${XDG_DATA_HOME:-~/.local/share}/amp/threads/T-*.json`          |\n| **Override**      | Set `TOKENLEAK_AMP_DIR` environment variable                     |\n| **Provider name** | `amp`                                                            |\n| **Aliases**       | `sourcegraph-amp`                                                |\n\n### Codebuff\n\nReads Codebuff/Manicode chat history files and parses assistant usage from direct metadata or provider-options run-state fallbacks.\n\n|                   |                                                                      |\n| ----------------- | -------------------------------------------------------------------- |\n| **Data location** | `~/.config/manicode/projects/**/chats/**/chat-messages.json`         |\n| **Override**      | Set `TOKENLEAK_CODEBUFF_DIR` environment variable                    |\n| **Provider name** | `codebuff`                                                           |\n| **Aliases**       | `manicode`                                                           |\n\n### Droid\n\nReads Factory Droid session settings files and uses sibling JSONL session text to recover a model name when Droid only records a provider lock.\n\n|                   |                                                   |\n| ----------------- | ------------------------------------------------- |\n| **Data location** | `~/.factory/sessions/*.settings.json`             |\n| **Override**      | Set `TOKENLEAK_DROID_DIR` environment variable    |\n| **Provider name** | `droid`                                           |\n| **Aliases**       | `factory`                                         |\n\n### Qwen\n\nReads Qwen CLI project JSONL logs. Assistant records with `usageMetadata` are parsed for prompt, candidate, thought, and cached-content tokens.\n\n|                   |                                                 |\n| ----------------- | ----------------------------------------------- |\n| **Data location** | `~/.qwen/projects/**/*.jsonl`                   |\n| **Override**      | Set `TOKENLEAK_QWEN_DIR` environment variable   |\n| **Provider name** | `qwen`                                          |\n| **Aliases**       | None                                            |\n\n### Roo Code and Kilo Code\n\nReads VS Code extension task logs from `ui_messages.json` and uses sibling `api_conversation_history.json` metadata to recover the selected model.\n\n|                   |                                                                                                  |\n| ----------------- | ------------------------------------------------------------------------------------------------ |\n| **Roo data**      | `~/.config/Code/User/globalStorage/rooveterinaryinc.roo-cline/tasks/**/ui_messages.json`         |\n| **Kilo data**     | `~/.config/Code/User/globalStorage/kilocode.kilo-code/tasks/**/ui_messages.json`                 |\n| **Override**      | Set `TOKENLEAK_ROO_CODE_DIR` or `TOKENLEAK_KILO_CODE_DIR` environment variable                   |\n| **Provider names** | `roo-code`, `kilo-code`                                                                          |\n| **Aliases**       | `roo`, `roocode`, `kilocode`                                                                      |\n\n### Kimi CLI\n\nReads Kimi CLI wire-protocol JSONL files. `StatusUpdate` messages provide input, output, and cache token counts.\n\n|                   |                                                   |\n| ----------------- | ------------------------------------------------- |\n| **Data location** | `~/.kimi/sessions/**/wire.jsonl`                  |\n| **Override**      | Set `TOKENLEAK_KIMI_DIR` environment variable     |\n| **Provider name** | `kimi`                                            |\n| **Aliases**       | `kimi-cli`                                        |\n\n### Kilo CLI\n\nReads Kilo CLI SQLite usage rows from the local Kilo data directory. This is separate from the VS Code Kilo Code extension provider (`kilo-code`).\n\n|                   |                                                   |\n| ----------------- | ------------------------------------------------- |\n| **Data location** | `~/.local/share/kilo/kilo.db`                     |\n| **Override**      | Set `TOKENLEAK_KILO_DIR` environment variable     |\n| **Provider name** | `kilo`                                            |\n| **Aliases**       | `kilo-cli`                                        |\n\n### Mux\n\nReads Mux session usage JSON files and preserves provider-reported per-model cost totals when present.\n\n|                   |                                                   |\n| ----------------- | ------------------------------------------------- |\n| **Data location** | `~/.mux/sessions/**/session-usage.json`           |\n| **Override**      | Set `TOKENLEAK_MUX_DIR` environment variable      |\n| **Provider name** | `mux`                                             |\n| **Aliases**       | None                                              |\n\n### Crush\n\nReads project-level Crush SQLite databases discovered from the Crush project registry. Crush exposes reliable session-level cost even when token breakdown is unavailable, so Tokenleak preserves cost without fabricating tokens.\n\n|                   |                                                                          |\n| ----------------- | ------------------------------------------------------------------------ |\n| **Data location** | `${XDG_DATA_HOME:-~/.local/share}/crush/projects.json` project registry  |\n| **Override**      | Set `TOKENLEAK_CRUSH_DIR` environment variable                           |\n| **Provider name** | `crush`                                                                  |\n| **Aliases**       | None                                                                     |\n\n### OpenClaw\n\nReads OpenClaw agent transcripts and optional `sessions.json` indexes. Model-change and model-snapshot records establish the model for assistant usage rows.\n\n|                   |                                                           |\n| ----------------- | --------------------------------------------------------- |\n| **Data location** | `~/.openclaw/agents/**/*.jsonl*`                          |\n| **Override**      | Set `TOKENLEAK_OPENCLAW_DIR` environment variable         |\n| **Provider name** | `openclaw`                                                |\n| **Aliases**       | `open-claw`                                               |\n\n### Hermes\n\nReads aggregated Hermes Agent session rows from the local SQLite state database. The parser accepts schema variants where optional cost or cache columns are absent, as long as `id`, `model`, `started_at`, and at least one token or cost signal are present.\n\n|                   |                                                   |\n| ----------------- | ------------------------------------------------- |\n| **Data location** | `${HERMES_HOME:-~/.hermes}/state.db`              |\n| **Override**      | Set `HERMES_HOME` or `TOKENLEAK_HERMES_DIR`       |\n| **Provider name** | `hermes`                                          |\n| **Aliases**       | `hermes-agent`                                    |\n\n### Goose\n\nReads Goose session totals from the local `sessions.db` SQLite database. Tokenleak scans the XDG path by default; use the override for macOS Application Support or legacy Block/goose locations.\n\n|                   |                                                                 |\n| ----------------- | --------------------------------------------------------------- |\n| **Data location** | `${XDG_DATA_HOME:-~/.local/share}/goose/sessions/sessions.db`   |\n| **Override**      | Set `TOKENLEAK_GOOSE_DIR` or `GOOSE_PATH_ROOT`                  |\n| **Provider name** | `goose`                                                         |\n| **Aliases**       | None                                                            |\n\n### Antigravity\n\nReads normalized Antigravity JSONL cache files. Tokenleak does not currently connect to the local Antigravity language-server RPC or create this cache; place compatible JSONL artifacts in the cache directory first.\n\n|                   |                                                                    |\n| ----------------- | ------------------------------------------------------------------ |\n| **Data location** | `~/.config/tokenleak/antigravity-cache/sessions/*.jsonl`           |\n| **Override**      | Set `TOKENLEAK_ANTIGRAVITY_DIR` environment variable               |\n| **Provider name** | `antigravity`                                                      |\n| **Aliases**       | None                                                               |\n\n### Zed Agent\n\nReads hosted Zed Agent rows from Zed's `threads.db`. External ACP agent rows are ignored to avoid double-counting usage that belongs to another provider.\n\n|                   |                                                                             |\n| ----------------- | --------------------------------------------------------------------------- |\n| **Data location** | `${XDG_DATA_HOME:-~/.local/share}/zed/threads/threads.db`                   |\n| **Override**      | Set `TOKENLEAK_ZED_DIR` environment variable                                |\n| **Provider name** | `zed`                                                                       |\n| **Aliases**       | `zed-agent`                                                                 |\n\n### Kiro\n\nReads Kiro CLI session JSON files with explicit turn token metadata. SQLite import can be enabled by pointing the override at a compatible local data source.\n\n|                   |                                                   |\n| ----------------- | ------------------------------------------------- |\n| **Data location** | `~/.kiro/sessions/cli/*.json`                     |\n| **Override**      | Set `TOKENLEAK_KIRO_DIR` environment variable     |\n| **Provider name** | `kiro`                                            |\n| **Aliases**       | None                                              |\n\n### Trae\n\nReads cached Trae usage API JSON files. Tokenleak does not currently authenticate with Trae or fetch this cache; export or sync compatible JSON first, then point Tokenleak at the cache.\n\n|                   |                                                            |\n| ----------------- | ---------------------------------------------------------- |\n| **Data location** | `~/.config/tokenleak/trae-cache/sessions/*.json`           |\n| **Override**      | Set `TOKENLEAK_TRAE_DIR` environment variable              |\n| **Provider name** | `trae`                                                     |\n| **Aliases**       | None                                                       |\n\n### Synthetic\n\nReads Octofriend/Synthetic SQLite token rows when available. Synthetic is also kept as an explicit provider filter so it does not duplicate unrelated provider usage during normal all-provider scans.\n\n|                   |                                                       |\n| ----------------- | ----------------------------------------------------- |\n| **Data location** | `~/.local/share/octofriend/sqlite.db`                 |\n| **Override**      | Set `TOKENLEAK_SYNTHETIC_DIR` environment variable    |\n| **Provider name** | `synthetic`                                           |\n| **Aliases**       | `octofriend`                                          |\n\n### OpenCode\n\nReads usage data from current OpenCode message storage when available. Falls back to legacy SQLite databases or legacy JSON session files.\n\n|                   |                                                                                                                                                                                        |\n| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Data location** | `~/.local/share/opencode/storage/message/<session>/*.json` or `~/.config/opencode/storage/message/<session>/*.json` (current), `~/.opencode/opencode.db` or `~/.opencode/sessions.db` (legacy), `~/.opencode/sessions/*.json` (legacy fallback) |\n| **Provider name** | `open-code`                                                                                                                                                                            |\n| **Aliases**       | `opencode`, `open_code`                                                                                                                                                                |\n\n### Pi\n\nReads local `pi-mono` session JSONL files. Assistant messages with `usage` metadata are aggregated from the on-disk session history.\n\n|                   |                                                  |\n| ----------------- | ------------------------------------------------ |\n| **Data location** | `~/.pi/agent/sessions/**/*.jsonl`                |\n| **Override**      | Set `PI_CODING_AGENT_DIR` environment variable   |\n| **Provider name** | `pi`                                             |\n| **Aliases**       | `pi-mono`                                        |\n\n## Output formats\n\n### `terminal` (default)\n\nA rendered terminal dashboard with:\n\n- GitHub-style heatmap using Unicode block characters (`░▒▓█`)\n- overview and provider sections with tokens, cost, streaks, rolling totals, and model leaders\n- day-of-week breakdown showing which days you code most\n- top models ranked by token usage\n- model efficiency and cache ROI sections when `--more` is enabled\n- session/project drill-down and attribution detail in the tabbed dashboard\n- insights such as peak day, top model, and provider mix\n\nFalls back to a compact one-liner when terminal width is under 40 characters.\n\n### `json`\n\nStructured JSON output containing:\n\n```jsonc\n{\n  \"schemaVersion\": 1,\n  \"generated\": \"2025-12-01T00:00:00.000Z\",\n  \"dateRange\": { \"since\": \"2025-09-01\", \"until\": \"2025-12-01\" },\n  \"providers\": [\n    {\n      \"name\": \"claude-code\",\n      \"displayName\": \"Claude Code\",\n      \"daily\": [\n        {\n          \"date\": \"2025-11-30\",\n          \"inputTokens\": 15000,\n          \"outputTokens\": 5000,\n          \"cacheReadTokens\": 2000,\n          \"cacheWriteTokens\": 500,\n          \"totalTokens\": 22500,\n          \"cost\": 0.0825,\n        },\n        // ...\n      ],\n      \"models\": [\n        {\n          \"model\": \"claude-sonnet-4\",\n          \"inputTokens\": 10000,\n          \"outputTokens\": 3000,\n          \"totalTokens\": 13000,\n          \"cost\": 0.075,\n        },\n      ],\n      \"totalTokens\": 22500,\n      \"totalCost\": 0.0825,\n    },\n  ],\n  \"aggregated\": {\n    \"currentStreak\": 12,\n    \"longestStreak\": 45,\n    \"totalTokens\": 1500000,\n    \"totalCost\": 52.5,\n    // ... rolling windows, peaks, averages, day-of-week, top models\n  },\n  \"more\": null\n}\n```\n\nWhen `--more` is enabled, the `more` field contains expanded metrics such as:\n\n- `inputOutput`, `monthlyBurn`, `cacheEconomics`, and `hourOfDay`\n- `modelEfficiency` rankings and ineligible-model reasons\n- `cacheRoi` summary plus provider/model/project ROI breakdowns\n- `sessionMetrics`, `sessionDrilldown`, and `projectDrilldown`\n- `attribution` clusters for repo/directory-oriented work grouping\n- compare metadata when applicable\n\nThe dedicated analysis commands also support JSON output:\n\n```bash\ntokenleak explain 2026-03-10 --format json\ntokenleak focus --format json\ntokenleak replay 2026-03-10 --format json\n```\n\n- An explain report (`tokenleak explain ... --format json`) includes a headline, summary bullets, evidence tables for providers/models/sessions, and anomaly flags.\n- `tokenleak focus ... --format json` produces a ranked focus report with deep-work scores, durations, token densities, project streaks, and per-session rationales.\n- Use `tokenleak replay ... --format json` to get a replay report containing flow blocks, a token velocity time series, model switch annotations, and a day summary with flow/think ratio.\n\nWhen `--compare` is used with `--format json`, the output is a compare payload with:\n\n```jsonc\n{\n  \"schemaVersion\": 1,\n  \"generated\": \"2026-03-14T10:15:00.000Z\",\n  \"periodA\": { \"range\": { \"since\": \"2026-02-15\", \"until\": \"2026-03-14\" }, \"stats\": {} },\n  \"periodB\": { \"range\": { \"since\": \"2026-01-18\", \"until\": \"2026-02-14\" }, \"stats\": {} },\n  \"deltas\": {\n    \"tokens\": 125000,\n    \"cost\": 4.8,\n    \"streak\": 3,\n    \"activeDays\": 5,\n    \"averageDailyTokens\": 4200,\n    \"cacheHitRate\": 0.08\n  }\n}\n```\n\n### `svg`\n\nA self-contained SVG image with:\n\n- Heatmap grid (7 rows x N weeks) with quantile-based colour intensity\n- Month labels and day-of-week labels\n- Stats panel and insights panel\n- Supports `dark` and `light` themes\n- Supports compare cards and expanded stat panels when `--more` is enabled\n\n### `png`\n\nSame layout as SVG, rendered to a PNG image via [sharp](https://sharp.pixelplumbing.com/). Useful for embedding in documents or sharing on platforms that do not support SVG.\n\nWith `--more`, PNG output includes expanded stat blocks such as input/output efficiency, projected monthly burn, cache economics, session metrics, hour-of-day activity, and model mix shift for compare renders. The newest drill-down analytics are optimized first for terminal and JSON output.\n\n## Configuration file\n\nCreate `~/.tokenleakrc` to set persistent defaults:\n\n```json\n{\n  \"format\": \"terminal\",\n  \"theme\": \"dark\",\n  \"days\": 90,\n  \"width\": 120,\n  \"noColor\": false,\n  \"noInsights\": false,\n  \"more\": false\n}\n```\n\n**Priority order** (highest wins): CLI flags > environment variables > config file > built-in defaults.\n\nAll fields are optional. Only include the ones you want to override.\n\n## Environment variables\n\n| Variable | Default | Description |\n| --- | --- | --- |\n| `TOKENLEAK_FORMAT` | `terminal` | Default output format |\n| `TOKENLEAK_THEME` | `dark` | Default theme |\n| `TOKENLEAK_DAYS` | `90` | Default lookback period in days |\n| `TOKENLEAK_MAX_JSONL_RECORD_BYTES` | `10485760` (10 MB) | Max size of a single JSONL record before it is rejected |\n| `TOKENLEAK_PRICING_FILE` | `~/.config/tokenleak/pricing.json` | User pricing overrides (see [Pricing sources](#pricing-sources)) |\n| `TOKENLEAK_CACHE_DIR` | `~/.cache/tokenleak` | Root for all caches (pricing, ingested usage, TUI snapshot) |\n| `TOKENLEAK_OFFLINE` | unset | Set to `1` to skip the LiteLLM pricing fetch and use cached or built-in rates |\n| `CLAUDE_CONFIG_DIR` | `~/.claude` | Claude Code configuration directory |\n| `CODEX_HOME` | `~/.codex` | Codex home directory |\n| `TOKENLEAK_CURSOR_DIR` | `~/.config/tokenleak` | Cursor credentials/cache root (`cursor-credentials.json`, `cursor-cache/`) |\n| `TOKENLEAK_GEMINI_DIR` | `~/.gemini/tmp` | Gemini CLI temp/session directory |\n| `TOKENLEAK_COPILOT_OTEL_DIR` | `~/.copilot/otel` | GitHub Copilot OTEL JSONL directory |\n| `TOKENLEAK_AMP_DIR` | `${XDG_DATA_HOME:-~/.local/share}/amp/threads` | Amp thread directory |\n| `TOKENLEAK_CODEBUFF_DIR` | `~/.config/manicode` | Codebuff/Manicode project chat root |\n| `TOKENLEAK_DROID_DIR` | `~/.factory/sessions` | Droid session settings directory |\n| `TOKENLEAK_QWEN_DIR` | `~/.qwen/projects` | Qwen project log directory |\n| `TOKENLEAK_ROO_CODE_DIR` | VS Code Roo Code task storage | Roo Code task-log directory |\n| `TOKENLEAK_KILO_CODE_DIR` | VS Code Kilo Code task storage | Kilo Code task-log directory |\n| `TOKENLEAK_KIMI_DIR` | `~/.kimi` | Kimi CLI root directory |\n| `TOKENLEAK_KILO_DIR` | `~/.local/share/kilo/kilo.db` | Kilo CLI SQLite database path |\n| `TOKENLEAK_MUX_DIR` | `~/.mux/sessions` | Mux session usage directory |\n| `TOKENLEAK_CRUSH_DIR` | Crush project registry discovery | Crush data directory or `crush.db` path |\n| `TOKENLEAK_OPENCLAW_DIR` | `~/.openclaw/agents` | OpenClaw agent transcript directory |\n| `TOKENLEAK_HERMES_DIR` | `~/.hermes` | Hermes directory containing `state.db` |\n| `HERMES_HOME` | `~/.hermes` | Hermes home directory |\n| `TOKENLEAK_GOOSE_DIR` | `${XDG_DATA_HOME:-~/.local/share}/goose/sessions/sessions.db` | Goose SQLite database path |\n| `GOOSE_PATH_ROOT` | unset | Goose root directory override |\n| `TOKENLEAK_ANTIGRAVITY_DIR` | `~/.config/tokenleak/antigravity-cache/sessions` | Antigravity normalized JSONL cache directory |\n| `TOKENLEAK_ZED_DIR` | `${XDG_DATA_HOME:-~/.local/share}/zed/threads/threads.db` | Zed Agent SQLite database path |\n| `TOKENLEAK_KIRO_DIR` | `~/.kiro/sessions/cli` | Kiro CLI session JSON directory |\n| `TOKENLEAK_TRAE_DIR` | `~/.config/tokenleak/trae-cache/sessions` | Trae cached usage JSON directory |\n| `TOKENLEAK_SYNTHETIC_DIR` | `~/.local/share/octofriend/sqlite.db` | Synthetic/Octofriend SQLite database path |\n| `PI_CODING_AGENT_DIR` | `~/.pi/agent` | Pi coding agent directory (sessions live under `sessions/`) |\n\n## What Tokenleak tracks\n\nTokenleak reads your **local** logs and caches. For Cursor, Tokenleak can also fetch fresh usage CSVs from Cursor's API after you authenticate with `tokenleak cursor login`; that network step only happens for Cursor and only to refresh the local cache.\n\nFor each day of usage, it tracks:\n\n- **Input tokens** — tokens sent to the model\n- **Output tokens** — tokens generated by the model\n- **Cache read tokens** — tokens served from prompt cache\n- **Cache write tokens** — tokens written to prompt cache\n- **Cost** — estimated USD cost based on per-model pricing\n\nIt then computes:\n\n- **Streaks** — consecutive days with any token usage\n- **Rolling 30-day totals** — tokens and cost over a sliding window\n- **Peak day** — the single day with the highest token usage\n- **Day-of-week breakdown** — which days of the week you use AI most\n- **Cache hit rate** — percentage of input tokens served from cache\n- **Top models** — models ranked by total token consumption\n- **Daily averages** — mean tokens and cost per day\n- **Model efficiency** — output-per-dollar, output/input ratio, cache coverage, and a composite score\n- **Prompt-cache ROI** — read savings, write cost, net savings, reuse ratio, and payback ratio\n- **Session and project drill-downs** — duration, dominant models, active days, and streaks\n- **Attribution clusters** — repo/directory-oriented groupings of sessions into investigations or feature work\n- **Explain and focus reports** — narrative daily diagnostics and deep-work session rankings\n\n\n### Model identity, Fast mode, and cost accuracy\n\nCodex history includes both `sessions` and `archived_sessions` under `CODEX_HOME` (normally `~/.codex`). Explicit turn model metadata takes precedence over session metadata; agent instruction prose is never used to guess the model. Repeated cumulative notifications and mirrored response usage records are reconciled before date filtering.\n\nFast mode is recorded separately from the base model. Reports retain service-tier breakdowns and show Fast where the log or a recognized model alias supplies that information. A response's actual tier takes precedence over the requested tier. Codex logs usually omit the tier entirely; for that usage Tokenleak uses the `service_tier` in `~/.codex/config.toml` (or the active profile's) and labels it **(config)**, for example `gpt-5.5 [Standard (config)]`, because it is your current setting rather than one recorded at the time. If you changed tiers, older usage is still priced at today's setting. Usage with no recorded tier and no configured one stays labeled **tier unknown** and is priced at Standard rates. The model browser includes the full inventory; top-model summaries retain their ten-model limit.\n\nCosts are **API-equivalent estimates**, not ChatGPT subscription charges or a reconstruction of past invoices. Known Fast tiers use verified API Fast rates, not subscription credit multipliers. Missing historical tier metadata uses the standard API rate as an estimate. GPT-5.6 estimates include cache writes and the published long-context threshold. Rates are current catalog estimates, not a date-versioned price history. Sources: [OpenAI pricing](https://developers.openai.com/api/docs/pricing), [Fast mode](https://developers.openai.com/api/docs/guides/fast-mode), and [Codex speed and credits](https://learn.chatgpt.com/docs/agent-configuration/speed).\n\nUnknown model/tier prices display **Unknown**; partially priced totals carry `+`. Provider-reported zero costs remain `$0.00`. The verified catalog deliberately does not invent prices for research-preview models such as Codex-Spark. Cursor `auto` or legacy Composer records without a reported cost also remain unpriced when no applicable rate can be verified.\n\n### Pricing sources\n\nEvery token is priced from the most trusted source that knows its model:\n\n1. **Your overrides** in `~/.config/tokenleak/pricing.json` (or `TOKENLEAK_PRICING_FILE`).\n2. **The verified built-in table**, refined by the model vendor's own [LiteLLM](https://github.com/BerriAI/litellm) row.\n3. **The vendor's own LiteLLM row** for models released after your Tokenleak build, so a new model is priced the day LiteLLM lists it. Reseller, gateway, and regional rows (which carry markups) never price a model on their own.\n\nClaude Code costs follow Anthropic's billing details: 1-hour cache writes bill at 2x input (5-minute writes at 1.25x), fast mode uses the published fast rates, `inference_geo: \"us\"` adds the 1.1x surcharge on 4.6+ models, and Haiku 5.5 prompts over 100K tokens use the long-prompt rates. Remote rates are cached for 24 hours; a stale cache is used immediately and refreshed in the background.\n\nSee which source priced each model, and what is still unknown:\n\n```bash\ntokenleak pricing\ntokenleak pricing --days 30 --format json\n```\n\nPrice a model yourself (rates are USD per 1M tokens; `cacheRead` defaults to 0.1x input and `cacheWrite` to 1.25x input):\n\n```json\n{\n  \"models\": {\n    \"claude-opus-5-5\": { \"input\": 4, \"output\": 20, \"cacheRead\": 0.2, \"cacheWrite\": 5 },\n    \"in-house-model\": { \"input\": 1, \"output\": 3 }\n  }\n}\n```\n\nA malformed override file stops the run with an error naming the file and field, rather than silently pricing with the wrong rates.\n\nCursor aliases such as `claude-4.5-opus-high-thinking` map to their canonical model for estimation, while reported costs take precedence. If the export endpoint redirects to sign-in, Tokenleak preserves the cached CSV and requests `tokenleak cursor login`. Only successful, schema-validated CSV responses replace the cache.\n\n## MCP Server\n\nTokenleak includes an MCP (Model Context Protocol) server that lets AI coding assistants query your token usage directly. Ask Claude Code, Cursor, or any MCP-compatible client \"how much have I spent this week?\" and get answers from your local data without leaving the editor.\n\n### Setup\n\nAdd the server to your MCP client configuration:\n\n**Claude Code** (`.mcp.json` in your project or `~/.claude/claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"tokenleak\": {\n      \"command\": \"bun\",\n      \"args\": [\"run\", \"/path/to/tokenleak/packages/mcp/dist/index.js\"]\n    }\n  }\n}\n```\n\n**Cursor** (Settings > MCP Servers):\n\n```json\n{\n  \"mcpServers\": {\n    \"tokenleak\": {\n      \"command\": \"bun\",\n      \"args\": [\"run\", \"/path/to/tokenleak/packages/mcp/dist/index.js\"]\n    }\n  }\n}\n```\n\n> Replace `/path/to/tokenleak` with your actual clone path. Make sure to run `bun run build` first.\n\n### Available tools\n\n| Tool | Description |\n| --- | --- |\n| `list_providers` | List all registered providers and their availability |\n| `get_usage_summary` | Token/cost summary with streaks, rolling windows, and per-provider breakdown |\n| `get_daily_usage` | Day-by-day usage data for trend analysis (default: 14 days) |\n| `get_cost_breakdown` | Models ranked by cost with token counts and share percentages |\n| `get_streaks_and_habits` | Streaks, day-of-week patterns, peak day, session metrics (default: 90 days) |\n| `compare_periods` | Compare two time periods with deltas for tokens, cost, streaks, and cache rate |\n\nAll tools accept optional `days`, `since`, and `until` parameters for date filtering. `get_usage_summary` and `get_daily_usage` also accept a `provider` parameter to filter to a specific provider.\n\n### Available resources\n\n| Resource | Description |\n| --- | --- |\n| `tokenleak://overview` | 30-day usage summary as JSON |\n| `tokenleak://provider/{name}` | Per-provider usage data |\n\n### Running the serve","readmeFilename":"README.md"}