Repository navigation
Releases: AThevon/TokenEater
Release list
TokenEater 6.1.0
What's new
- Several Claude accounts side by side, by @Mayukh-D and @AThevon (#284). Mayukh built the first version for his own personal and work accounts: one usage store per account, Claude metrics resolved against another account, the extra dashboard column, a token reader that only goes through
security. 6.1 takes it to any number of accounts. Add one from Settings > Providers > Track another Claude account: pick its Claude Code config folder, click Connect, then give it a name and a colour. Nothing is read before you click Connect. Each account gets its own menu bar ring, popover section, dashboard section, notifications, and a new Claude Account widget where you pick which account it shows. Huge thanks to Mayukh, who also tested it end to end on his two accounts. - Custom Claude config folder. If Claude Code runs with
CLAUDE_CONFIG_DIR, point the main account at that folder (Settings > Providers > Folder > Change): login, History and Agent Watchers follow it. Thanks to @xxfast for the report (#294). - No more recurring "TokenEater wants to access" Keychain dialog. TokenEater now reads the Claude Code login only through Apple's
securitytool on every automatic refresh, so the one dialog you may see namessecurity. Thanks to @KillerPenguinz for the report, and to @shuhulx and @caiofacchinato for confirming it kept coming back (#225). - Tracking survives an expired Claude Code login. When the Keychain login has expired, TokenEater uses a newer one found on your Mac. If there is none and it stays expired for more than an hour, the popover and dashboard say so and how to renew it, and an expired account keeps its last numbers on screen, dated and greyed, instead of a fresh-looking 0%. To get a notification too, turn on Settings > Notifications > Credentials expired. Thanks to Jordan (@Fourcher) for a precise diagnosis (#268).
- The time left before a reset is easier to read, bigger and bolder in the popover, the dashboard and the widgets. Thanks to @simobgl for the suggestion (#295).
- Arrange the dashboard. Studio > Dashboard now has an Arrangement setting (Auto, One column, Two columns) and a Section order you drag, used by the dashboard, the popover and the mode pills.
- Extra credits with no monthly limit show the amount spent instead of a misleading 0%, in the dashboard, popover, menu bar and widgets. Thanks to @Mayukh-D for the fix (#292).
- Smaller ones: leaving Studio keeps the layout you just edited (thanks @mvilaregut, #285); Opus 5.5 and Sonnet 5.5 get their own History labels; Sonnet and Opus gauges only appear when Anthropic actually sends those limits; Codex Pro Max and Go plans get their badge; usage reading is more robust; History reads Claude Code transcripts in chunks, which lowers the memory spike at launch.
Don't see the new Claude Account widget? macOS can read the widget list from an older copy of TokenEater (a backup, a DMG copy, an Xcode build). Delete the old copies, then add the widget again. Thanks to @Mayukh-D for spotting it.
What's Changed
- docs: bring AGENTS.md up to 6.0 by @AThevon in #278
- docs: remove the Buy Me a Coffee links by @AThevon in #279
- docs: add GitHub Sponsors by @AThevon in #280
- docs: fix the mode pill names and the Providers path by @AThevon in #282
- fix: stale copy and a status poll that ignored the Claude switch by @AThevon in #283
- fix: keep the last edited mode when leaving Studio by @AThevon in #286
- fix: harden Claude usage decoding against the live contract by @AThevon in #289
- fix: give Claude 5.5 models their own History labels by @AThevon in #287
- fix(codex): align plans, spend control and long windows with the current usage schema by @AThevon in #288
- fix: stop prompting for the Keychain in TokenEater's name on every refresh by @AThevon in #290
- fix: show the amount spent when extra credits have no monthly limit by @Mayukh-D in #292
- fix: keep tracking past an expired Keychain token, and say so when it stays expired by @AThevon in #291
- fix: show the amount spent everywhere when extra credits are uncapped by @AThevon in #293
- v6.1.0 - Several Claude accounts, custom config folder, readable countdown by @Mayukh-D in #284
New Contributors
Full Changelog: v6.0.0...v6.1.0
TokenEater 6.1.0-beta.1
Beta, not an update for everyone. It is not offered by the in-app updater nor Homebrew.
Highlights
- Several Claude accounts side by side, by @Mayukh-D and @AThevon (#284). Mayukh built the first version for his own personal and work accounts: one usage store per account, Claude metrics resolved against another account, the extra dashboard column, a token reader that only goes through
security. This beta takes it to any number of accounts, each added from its config folder with a name and a colour, and lets the main account live in a customCLAUDE_CONFIG_DIR(#294). Huge thanks to Mayukh, who also fixed extra credits on org seats (#292).
What's Changed
- docs: bring AGENTS.md up to 6.0 by @AThevon in #278
- docs: remove the Buy Me a Coffee links by @AThevon in #279
- docs: add GitHub Sponsors by @AThevon in #280
- docs: fix the mode pill names and the Providers path by @AThevon in #282
- fix: stale copy and a status poll that ignored the Claude switch by @AThevon in #283
- fix: keep the last edited mode when leaving Studio by @AThevon in #286
- fix: harden Claude usage decoding against the live contract by @AThevon in #289
- fix: give Claude 5.5 models their own History labels by @AThevon in #287
- fix(codex): align plans, spend control and long windows with the current usage schema by @AThevon in #288
- fix: stop prompting for the Keychain in TokenEater's name on every refresh by @AThevon in #290
- fix: show the amount spent when extra credits have no monthly limit by @Mayukh-D in #292
- fix: keep tracking past an expired Keychain token, and say so when it stays expired by @AThevon in #291
- fix: show the amount spent everywhere when extra credits are uncapped by @AThevon in #293
New Contributors
Full Changelog: v6.0.0...v6.1.0-beta.1
TokenEater 6.0.0
What's Changed
- docs: restructure the README as a storefront by @AThevon in #266
- fix: keep watchers waiting when a meta message lands mid tool call by @mpge in #270
- fix: only take the mouse over the watcher indicators, not their expanded size by @mpge in #272
- fix: paint the DSMenu capsule by moving it onto the Menu by @AThevon in #275
- feat: add Codex usage tracking, widgets, and combined token history by @ilia3546 in #267
- fix: say why the Keychain read failed, read every matching item, and add Reset connection by @AThevon in #274
- v6.0.0 - OpenAI Codex as a first-class provider by @AThevon in #277
New Contributors
Full Changelog: v5.13.0...v6.0.0
TokenEater 5.13.0
Highlights
- Agent Watchers now see sessions run from the VSCode extension. The Claude Code extension (VSCode, Cursor, Windsurf) spawns its own bundled CLI from the extension folder, a path the process scanner did not know, so extension-only sessions never showed a watcher. They now appear like any terminal session, IDE badge included. Requires a current extension: old 2.0.x builds ran through node and stay undetectable. Thanks to @mhmmsips for the report.
- History speaks Claude 5. Opus 5 and Sonnet 5 get their own labels and colors in the History tab instead of showing up as "Opus 4.8" and an unversioned "Sonnet"; already-parsed history reclassifies automatically on first open. Both also reported by @mhmmsips, three sharp reports in one day.
What's Changed
- fix: recognise the Claude 5 generation in History (Opus 5, Sonnet 5) by @AThevon in #263
- feat: detect Claude Code sessions run from the VSCode-family extension by @AThevon in #264
- v5.13.0 - VSCode extension watchers, Claude 5 in History by @AThevon in #265
Full Changelog: v5.12.3...v5.13.0
TokenEater 5.12.3
Highlights
- The session scanner no longer eats CPU at idle. On busy machines (hundreds of processes, thousands of session transcripts) TokenEater could sit at half a CPU core while doing nothing. The scanner now remembers what it already knows between ticks: process classification is byte-matched and memoized, project folders are only re-listed when they actually change, and transcripts are only re-parsed after an append. Idle usage drops to well under 1% of a core, and new sessions, renames, and resumed sessions still show up exactly as fast as before. Huge thanks to @richardsbretta-bit for an exceptional report (#255), CPU sample and validated workaround included, which pointed at both halves of the cost.
What's Changed
- fix: session monitor CPU usage at idle (#255) by @AThevon in #256
- v5.12.3 - Session monitor CPU fix by @AThevon in #257
Full Changelog: v5.12.2...v5.12.3
TokenEater 5.12.2
Highlights
- Studio: the "add element" pill is legible again. It now reads clearly on every accent color, stays within its fill, and the element and segment headers stay in view while scrolling. Big thanks to @tarekrached, who spotted and fixed this in their first contribution.
- Minor internal security hardening: the Electron-compat fixed-IV AES path is now private, so it can't be reused for new encryption by mistake. Reported by Mike Graff (@michaelgraff).
What's Changed
- refactor(security): make the fixed-IV AES encrypt path private by @AThevon in #252
- fix: make the Studio add-element pill legible by @tarekrached in #250
- v5.12.2 - Studio add-element pill legibility by @AThevon in #253
New Contributors
- @tarekrached made their first contribution in #250
Full Changelog: v5.12.1...v5.12.2
TokenEater 5.12.1
Fixed: a local privilege escalation in the in-app updater
When installing an update, TokenEater used to write its install script into a folder any program running under your account could write to, then run that script as root. A program already present on your machine could replace the script between those two steps, and get its own code executed with full privileges the moment you approved the update prompt. It required an attacker to already be running code as you, but it turned that into complete control of the machine.
The privileged step now runs a script bundled inside the app itself, and it verifies the update it is about to install rather than trusting a check made earlier: the signature is pinned to our Developer ID, notarization is checked, and installing an older release is refused. The app also no longer comes back up with root privileges after an update.
Reported privately by Mike Graff (Dolby Laboratories), who also wrote the first half of the fix. Details in GHSA-jxvp-49pc-jjg9.
Changed: in-app updates now require TokenEater to live in /Applications
macOS only protects an app bundle from tampering when it sits at the top level of /Applications, which is where the installer and the Homebrew cask put it. Anywhere else the fix above could be undone, so the in-app updater now refuses to run and points you at the DMG or brew instead. If you keep TokenEater somewhere else, move it to /Applications to keep in-app updates working.
Also in this release
- The installer no longer writes a root-owned log file into your Application Support folder, and cleans up the one older versions left behind.
- With several users logged in at once, the installer now waits for the right account's instance to quit, and hands the installed app to the right owner.
Full Changelog: v5.12.0...v5.12.1
TokenEater 5.12.0
New: the History chart becomes a four-tab stats card
The chart card in History now has tabs: Tokens, Projects, Sessions, and Cache.
- Tokens is the stacked-by-model chart you already know.
- Projects ranks every project in the selected range, with share bars, token totals and percent of total. Hover a row for the full path. The "Top project" chip jumps straight to it. Thanks to shuhulx for the request.
- Sessions charts your session count per day (or per hour on the 24h range), with average tokens per session on hover.
- Cache plots your cache hit-rate over time, so you can see how well prompt caching is working for you.
New: right-click quick actions on Agent Watcher cards
Right-click any watcher card to jump to the session, open the project in Finder, copy the project path or session id, reveal the session transcript (correct even for claude --resume sessions), or hide the watcher until the session ends. Left click still teleports. The menu is a native macOS menu that stays rock-stable while the overlay keeps refreshing behind it. Thanks to shuhulx for the idea and the scoping.
Fixed: the Sonnet tile no longer shows a meaningless 0%
On plans without a dedicated weekly Sonnet pool, the Monitoring dashboard showed a Sonnet tile stuck at 0% forever. It is now shown only when your plan actually has one, like Opus and Fable.
Also in this release
- A watcher context menu dismissed with Escape no longer leaves the overlay capturing clicks until the next mouse move.
- Switching stats tabs no longer flashes the loading bar.
What's Changed
Full Changelog: v5.11.0...v5.12.0
TokenEater 5.11.0
Fixed: false "weekly reset" notification
TokenEater could show a "Weekly reset / New cycle" notification in the middle of the week, when no reset had happened. It was firing whenever your weekly gauge eased from orange or red back to green, which with Smart Color can happen just because time caught up to your usage, not because the window actually rolled. The reset notification now only fires on a real window reset. Thanks to darkguy2008 for the report.
New: time until you're back to 0%
When you get ahead of your weekly pace, the pacing card on the Monitoring window now shows how long to wait for the steady pace to catch up if you stop now, as a "back to 0% in 3d 14h" counter. It accounts for your workweek schedule if you use one, and hides when you are already at or under pace. Thanks to darkguy2008 for the idea.
What's Changed
Full Changelog: v5.10.0...v5.11.0
TokenEater 5.10.0
Pacing for Fable
Fable now has its own pacing, alongside session and weekly. Add it as a popover element or a menu bar segment from Studio, with the same templates and live preview, and see how your Fable usage tracks against a steady pace through the week. Thanks to jstevej for the request.
The session pacing graph shows your real trajectory
The pacing graph on the Monitoring hero card used to draw a single straight line to your current point. It now plots your actual usage curve over the session window, so a quiet start followed by a busy stretch reads as the real shape it is. The dashed diagonal stays as the steady-pace reference. The curve builds up as the app refreshes, and is not retroactive. Thanks to cx-revops for the idea.
Fixes
- The Agent Watcher now shows the right session for a
claude --resume. It was binding the running process to whatever session lived in its launch directory, so it showed the wrong name and a stale idle state. It now resolves each process by its real session id first. Thanks to shuhulx for the precise diagnosis (#233).
Note on pacing display
Pacing elements now show a small placeholder when a metric exists but has no active window yet (for example, a model you have not used this week), instead of showing nothing at all.
What's Changed
Full Changelog: v5.9.0...v5.10.0