Token tracker for LLM CLI tools with live terminal dashboard
Project description
Tokentap (formerly Sherlock)
Token Tracker for LLM CLI Tools
Installation • Quick Start • Features • Commands • Contributing
tokentap tracks token usage for LLM CLI tools with a live terminal dashboard. See exactly how many tokens you're using in real-time.
Why tokentap?
- Track Token Usage: See exactly how many tokens each request consumes
- Monitor Context Windows: Visual fuel gauge shows cumulative usage against your limit
- Debug Prompts: Automatically saves every prompt as markdown and JSON for review
- Zero Configuration: No certificates, no setup - just install and go
Installation
pip install tokentap (We are working on this one)
Or install from source:
git clone https://github.com/jmuncor/tokentap.git
cd tokentap
pip install -e .
Requirements
- Python 3.10+
Quick Start
Terminal 1: Start the Dashboard
tokentap start
You'll be prompted to choose where to save captured prompts, then the dashboard appears:
┌─────────────────────────────────────────────────────────────┐
│ TOKENTAP - LLM Traffic Inspector │
├─────────────────────────────────────────────────────────────┤
│ Context Usage ████████████░░░░░░░░░░░░░░░░ 42% │
│ (84,231 / 200,000 tokens) │
├─────────────────────────────────────────────────────────────┤
│ Time Provider Model Tokens │
│ 14:23:01 Anthropic claude-sonnet-4-20250514 12,847 │
│ 14:23:45 Anthropic claude-sonnet-4-20250514 8,234 │
│ 14:24:12 Anthropic claude-sonnet-4-20250514 15,102 │
├─────────────────────────────────────────────────────────────┤
│ Last Prompt: "Can you help me refactor this function..." │
└─────────────────────────────────────────────────────────────┘
Terminal 2: Run Your LLM Tool
# For Claude Code
tokentap claude
# For Gemini CLI (see known issues)
tokentap gemini
# For OpenAI Codex
tokentap codex
That's it! Watch the dashboard update in real-time as you work.
Features
Live Terminal Dashboard
Real-time token tracking with color-coded fuel gauge:
- Green: < 50% of limit
- Yellow: 50-80% of limit
- Red: > 80% of limit
Prompt Archive
Every intercepted request is saved to your chosen directory:
- Markdown - Human-readable format with metadata
- JSON - Raw API request body for debugging
Session Summary
When you exit, see your total usage:
Session complete. Total: 84,231 tokens across 12 requests.
Commands
| Command | Description |
|---|---|
tokentap start |
Start the proxy and dashboard |
tokentap claude |
Run Claude Code with proxy configured |
tokentap gemini |
Run Gemini CLI with proxy configured |
tokentap codex |
Run OpenAI Codex CLI with proxy configured |
tokentap run --provider <name> <cmd> |
Run any command with proxy configured |
Options
tokentap start [OPTIONS]
Options:
-p, --port NUM Proxy port (default: 8080)
-l, --limit NUM Token limit for fuel gauge (default: 200000)
tokentap claude [OPTIONS] [ARGS]...
Options:
-p, --port NUM Proxy port (default: 8080)
How It Works
┌─────────────────────────────────────────────────────────────────┐
│ Terminal 1: tokentap start │
│ ┌─────────────────────────────────────────────────────────────┐│
│ │ HTTP Proxy (localhost:8080) ││
│ │ + Dashboard ││
│ │ + Prompt Archive ││
│ └─────────────────────────────────────────────────────────────┘│
└───────────────────────────────┬─────────────────────────────────┘
│ HTTP
│
┌───────────────────────────────┴─────────────────────────────────┐
│ Terminal 2: tokentap claude │
│ ┌─────────────────────────────────────────────────────────────┐│
│ │ Sets ANTHROPIC_BASE_URL=http://localhost:8080 ││
│ │ Runs: claude ││
│ └─────────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────┘
│
│ HTTPS
▼
┌───────────────────┐
│ api.anthropic.com │
└───────────────────┘
Supported Providers
| Provider | Command | Status |
|---|---|---|
| Anthropic (Claude Code) | tokentap claude |
Supported |
| Google (Gemini CLI) | tokentap gemini |
Blocked by upstream issue |
| OpenAI (Codex) | tokentap codex |
Supported |
Known Issues
Gemini CLI
Gemini CLI currently has a known issue where it ignores custom base URLs when using OAuth authentication. tokentap's Gemini support will work automatically once the Gemini CLI team fixes this issue.
Contributing
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Development Setup
git clone https://github.com/jmuncor/tokentap.git
cd tokentap
python -m venv venv
source venv/bin/activate
pip install -e .
License
This project is licensed under the MIT License - see the LICENSE file for details.
See what's really being sent to the LLM. Track. Learn. Optimize.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tokentap-0.1.0.tar.gz.
File metadata
- Download URL: tokentap-0.1.0.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8e46313bbf03ec695b94dba0b97e151b6a48030d40324e6614e457be72c1116
|
|
| MD5 |
a68cd9b463593f7dc4bceb29ca75e9c6
|
|
| BLAKE2b-256 |
51c03c6dcaf24871c07c80c87f937ed40237e77d6f2ea7951b6e79a75a865bf3
|
Provenance
The following attestation bundles were made for tokentap-0.1.0.tar.gz:
Publisher:
publish.yml on jmuncor/tokentap
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tokentap-0.1.0.tar.gz -
Subject digest:
e8e46313bbf03ec695b94dba0b97e151b6a48030d40324e6614e457be72c1116 - Sigstore transparency entry: 887923595
- Sigstore integration time:
-
Permalink:
jmuncor/tokentap@a2e85a44696739be99ec2f2d62e23d2a90be0ea1 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/jmuncor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a2e85a44696739be99ec2f2d62e23d2a90be0ea1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file tokentap-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tokentap-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b11ff9582a898522d2e355ad35e7251e906241c724f4c02e409cb6031ac3c8be
|
|
| MD5 |
371168a4f58bd4cb8efc7d2eefda0121
|
|
| BLAKE2b-256 |
21b78f5319331ff83d511973d2ff0586ed56c6e7b0999f71e25406298cace52f
|
Provenance
The following attestation bundles were made for tokentap-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on jmuncor/tokentap
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tokentap-0.1.0-py3-none-any.whl -
Subject digest:
b11ff9582a898522d2e355ad35e7251e906241c724f4c02e409cb6031ac3c8be - Sigstore transparency entry: 887923742
- Sigstore integration time:
-
Permalink:
jmuncor/tokentap@a2e85a44696739be99ec2f2d62e23d2a90be0ea1 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/jmuncor
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a2e85a44696739be99ec2f2d62e23d2a90be0ea1 -
Trigger Event:
release
-
Statement type: