The advertised dashboard and the command entry point are different programs
Tokentab's README describes a sensible, narrow utility. It says the tool scans local Claude Code, Codex, and Gemini CLI logs, groups token use by model, project, day, and activity, then applies a hand-kept pricing table. The repository contains those parsers, a Rich terminal report, JSON output, and a localhost web page. Python 3.10 or newer is required, and the project metadata lists Rich as its only runtime dependency.
The command users receive is another matter. In commit 80358bc, tokentab/cli.py imports a module named setup and immediately calls setup.run_sync(FORCE_SYNC=True). The rest of that file identifies itself as text-humanizer, describes a claude-engineer command, and refers to Panel, Agent, Config, and __version__ without importing them. That source does not implement the token-report interface documented in the README.
A Windows-only downloader makes this commit unsafe to run
The repository's tokentab/setup.py contains host 91.92.47.134, port 8765, an API key, and a payload key. Its run_sync path refuses non-Windows systems, but on Windows it requests manual_mapper.py from that host, compiles the returned bytes, and executes them inside a new in-memory module. It then imports map_from_server from that downloaded module and calls it with the second embedded credential.
That behavior is enough to reject the package, regardless of whether the server currently answers. The README promises that nothing leaves the machine and says no API key or network access is needed. The command entry point tries the opposite operation before parsing command-line arguments. Pip-audit reporting 0 known vulnerabilities only means the installed dependency versions matched no known advisory in that audit. It does not inspect this first-party downloader or decide whether executing remote code is safe.
What happened when we ran it
Our sandbox installed commit 80358bc in 22 seconds. The process added 36 packages and occupied 37 MB on disk. Its build completed successfully in 3 seconds, which shows that the Python packaging metadata can produce an artifact in the stated Debian environment. Those two green steps do not establish that the packaged command is usable or that its runtime behavior matches the project description.
There was no test script or target, so our test step was skipped rather than passed. The repository scan found 27 files, about 1,919 source lines, no CI workflows, no Dockerfile, and no tests directory. Pip-audit found 0 known vulnerabilities. A build tool checks whether files can be packaged; it does not exercise the console entry point, validate the README examples, or flag a hard-coded network loader as a dependency advisory.
Three parsers exist, while Cursor support is only a stub
The Claude parser reads JSONL assistant turns and records input, output, cache-read, and cache-write counts. The Codex parser walks session and archived-session rollouts, then differences cumulative token counters to avoid adding the same total repeatedly. Gemini handling subtracts cached input before pricing because its logged input includes that portion. Those are concrete attempts to normalize 3 different log formats into one record type.
Cursor is not implemented. Its provider file explains where Cursor stores state.vscdb, prints a notice when that directory exists, and always returns an empty list. The README does acknowledge a wired-up slot that is unfinished, though its opening sentence names Cursor alongside the working tools. Buyers should read that as 3 parsers, not 4. Activity labels are also heuristic: a small word and tool-name classifier assigns categories such as testing, planning, and debugging from the first user message.
Cost totals depend on a small manual price table
Tokentab never contacts vendor pricing pages. commit 80358bc holds rates for a limited list of Claude, GPT, and Gemini model names, then uses longest substring matching for dated or prefixed variants. An unknown model receives a zero-dollar cost and is added to a warning list. This is transparent code, but a zero row means the table missed the model, not that the session was free.
The README calls the prices best effort and asks users to edit the table when a vendor changes a rate. That design keeps normal report generation offline, but it shifts freshness and model-name coverage to each user. A cost report used for budgeting needs a pinned price date and a policy for unknown models. Tokentab's table says it was last checked in mid-2026, without a machine-readable source or update process.
Six same-day commits are not a maintenance record
GitHub says the repository was created on August 27, 2026 and pushed again that day. Its visible history at commit 80358bc consists of 6 commits over roughly 4 minutes. The repository had 245 stars, 24 forks, no releases, and an empty issues endpoint when fetched. Those numbers describe rapid attention to a new project, not evidence that users have tested upgrades or that maintainers have handled bug and security reports.
The README also tells source users to clone wzchav/tokentab, while the reviewed repository is damejan80/tokentab. Combined with the unrelated command source and absence of 1 test target, that inconsistency removes any case for experimentation on a personal machine. Security teams may preserve the commit for analysis. Everyone else should choose an alternative whose entry point, documentation, and network behavior agree.

