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.0.tar.gz (14.0 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.0-py3-none-any.whl (17.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mintoken-0.2.0.tar.gz
  • Upload date:
  • Size: 14.0 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.0.tar.gz
Algorithm Hash digest
SHA256 db062c912930e7a958fc69662cd786fc1b7bb7151eac41e26865d9240791a78b
MD5 009cde4a30e084c4af2cd44c4f129843
BLAKE2b-256 74cf949cb402dbdf0b27a96b9c63974dcb6c4c56394a59b59bdc917dfdfb2b82

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mintoken-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 17.1 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7ae2f42200c8fafff8d22495df169f09ea70567a5edd06168a84ef5d7d74ea9f
MD5 c643846cf1b3c682b5eeba29df572a9d
BLAKE2b-256 41840211307b8463fe1a928e7932501a9c7a6492f01c1d3bd46e826f5fb19b61

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