Logs never leave the machine
Most “AI cost” products want an API key, a cloud workspace, or a browser extension that sees the prompt. That is a non-starter if the logs contain customer code, unreleased names, or the system prompt you would not paste into Slack. TokensLab is a desktop window. It reads files you already have. It does not create an account. It does not send telemetry. It does not make a network call.
The rate card ships inside the installer. When a provider changes a price, we ship an updated build. We do not “phone home for prices,” because that would be a network call with a plausible excuse, and then another, and then a crash reporter that uploads a stack with a file path in it.
What actually sits on disk
Claude Code writes JSONL under ~/.claude/projects. Those files are the product’s only input. TokensLab tails them, stores a local SQLite file in the app’s user-data directory, and renders the dashboard from that. Prompts stay in the original logs. The app does not re-upload them, summarize them to a vendor, or train on them. There is no destination.
This website is a separate thing: static HTML. Language and theme live in localStorage. Analytics are off unless we flip a switch in config, and even then we prefer a cookie-less provider. The desktop app does not inherit any of that.
Closed source, still inspectable at the boundary
At launch the source is not public. GitHub is for stars and release binaries — the same .dmg, .exe and .deb you get from the download page. That is a product choice, not a privacy one. Privacy is the missing network stack. You can confirm it with a firewall: the process has nowhere to go.
Unpriced models are reported as unpriced, never as free. That is the same honesty applied to money as we apply to data. If we do not know the rate, we will not invent a number and we will not ship your logs to someone who might. Download TokensLab and point it at the folder that is already on the machine.