Skip to main content

Local-proxy CLI for mintoken — sit between Claude Code / Codex and the upstream LLM, dedupe + truncate context, save 40-70% on long agent sessions.

Project description

mintoken

PyPI License: MIT Docs

Local-proxy for Mintoken. Sit between your AI coding tool (Claude Code, Codex, Cursor, your own LangChain agent) and the upstream LLM provider. Dedupe repeated tool results, truncate giant logs, save 40-70% of input tokens on long agent sessions. Same model output, no SDK changes, one env var swap.

Why

Modern AI coding agents loop. Every turn re-sends the entire prior conversation. After 20 turns of file reads + bash output + grep results, you're paying to re-send the same content over and over — typically 90% of your bill is cache reads of stale context.

mintoken sits on localhost, intercepts your agent's HTTPS traffic to the LLM provider, dedupes redundant tool results in older turns, truncates the boring middle of giant logs — then forwards what's left to the real provider. Anthropic / OpenAI bill you for the smaller request.

Install

pip install mintoken

Or from source:

git clone https://github.com/vijayPrajapatii/mintoken-cli
cd mintoken-cli
pip install -e .

Setup

# (optional) save your mintoken key so the dashboard tracks savings
mintoken login --key mt_live_...

# start the local proxy
mintoken proxy

You'll see:

mintoken-cli v0.1.0
listening on  http://127.0.0.1:8788
level         standard
mintoken key  mt_live_da7a…
anthropic →   https://api.anthropic.com
openai →      https://api.openai.com

Use with Claude Code

# PowerShell
$env:ANTHROPIC_BASE_URL = "http://127.0.0.1:8788"
claude
# bash / zsh
export ANTHROPIC_BASE_URL="http://127.0.0.1:8788"
claude

Your existing Claude Code OAuth session keeps working — the proxy forwards the auth header unchanged. The OAuth token never leaves your machine.

Use with Codex / OpenAI clients

$env:OPENAI_BASE_URL = "http://127.0.0.1:8788/v1"
codex
export OPENAI_BASE_URL="http://127.0.0.1:8788/v1"
codex

Or with the OpenAI SDK directly:

from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8788/v1", api_key="sk-...")

Use with both at once

The proxy handles both providers on the same port. Set both env vars and run Claude Code + Codex side by side — they share the same proxy.

Flags

mintoken proxy [OPTIONS]

  --port              -p   default: 8788
  --host                   default: 127.0.0.1
  --key                    mintoken API key (or set MINTOKEN_KEY env)
  --level             -l   light | standard | aggressive  (default: standard)
  --anthropic-upstream     default: https://api.anthropic.com
  --openai-upstream        default: https://api.openai.com

Compression levels

Level Min tokens to engage Tool-result truncate threshold Recency window (untouched)
light 8,000 4,000 last 8 turns
standard (default) 4,000 2,000 last 6 turns
aggressive 2,000 1,000 last 4 turns

Aggressive saves the most but compresses content the model might still need. Light is conservative. Standard is the production default and is what we'd recommend for nearly everyone.

How it works (v0.2+)

Starting in v0.2.0, the CLI is a thin client that delegates compression to mintoken's hosted API. Two reasons: it lets us ship algorithm improvements instantly to every user without a pip install --upgrade, and it unlocks Tier 2 model-based summarization (Pro plan) which can't run locally.

Claude Code / Codex
    ↓ POST localhost:8788/v1/messages
mintoken local proxy
    ├─→ POST api.mintoken.dev/v1/cli/compress-context  (auth: mt_live_…)
    │     ← compressed body + savings metrics
    ↓ forward to upstream
api.anthropic.com / api.openai.com

If api.mintoken.dev is unreachable or your key is invalid, the proxy forwards the original body untouched — your request always completes.

What gets compressed

Dedupe — when the same tool_result content appears multiple times in older turns (e.g., your agent re-reads the same file 3x), the earliest copies are replaced with a small back-reference. Only the latest occurrence stays verbatim.

Truncate — when a single tool_result is bigger than the per-result threshold (e.g., a 4,000-token build log), the head + tail are kept and the middle is dropped with a marker.

What is never touched

  • The system prompt
  • The most recent N messages (recency window)
  • Mid-flight tool_use / tool_result pairs
  • Any conversation under the min-tokens threshold

If compression somehow produces a bigger body, the original is forwarded untouched. Never increases your bill.

Verify it's working

The proxy attaches three response headers to every forwarded request:

x-mintoken-cli-tokens-before: 9027
x-mintoken-cli-tokens-after:  2947
x-mintoken-cli-tokens-saved:  6080

If something went wrong, an x-mintoken-cli-skipped header tells you why (auth_failed, quota_exceeded, cloud_unreachable, below_threshold, no_savings, etc.).

You can also visit your dashboard at https://mintoken.dev/dashboard — savings flow there in real time.

Privacy

  • What stays on your machine: your upstream provider auth token (Anthropic OAuth, OpenAI API key). The proxy forwards it unchanged to the real provider.
  • What goes to api.mintoken.dev: the request body — messages, model, tool definitions. Sent over HTTPS, processed in memory, never logged or stored. We persist token counts + metadata only (for your dashboard).
  • What we never see: your provider auth token, any response from the upstream, anything outside the request body.

If your environment requires content not to leave your machine at all (regulated industries, defense, healthcare), email hello.mintoken@gmail.com about the self-hosted Enterprise tier.

License

MIT.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mintoken-0.2.1.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mintoken-0.2.1-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file mintoken-0.2.1.tar.gz.

File metadata

  • Download URL: mintoken-0.2.1.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for mintoken-0.2.1.tar.gz
Algorithm Hash digest
SHA256 1549d52a0042912c3820efb958f78ff579ac05f76bd5fc9d8de358f044688a6c
MD5 5d325d1782899bdd0debd11b98edbef4
BLAKE2b-256 baf6b95ad7f9ef7bb2cab96d2b05afb5b38d9cd27854944e1e7c0f4631bfb705

See more details on using hashes here.

File details

Details for the file mintoken-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: mintoken-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for mintoken-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 751fd285a0422e09bc4d44205e453c42d8aa507d288c7d22bbea219fedbd4e16
MD5 fdde31b2976d6edcc20fe77022275814
BLAKE2b-256 cae69d3aef5d286a8b3cabebd42494172d0401161e2cbac06cde7d4cb3669928

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page