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.2.tar.gz (14.6 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.2-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mintoken-0.2.2.tar.gz
  • Upload date:
  • Size: 14.6 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.2.tar.gz
Algorithm Hash digest
SHA256 274f429e0f252d521d40feb26d167329b4960694aa8d146ca422f8e1d67f1453
MD5 2b687859feaf058e68febd24f179c183
BLAKE2b-256 437cb508ea34e3b858839c5ca1c5b86778b5ab4adb7ba33a4125f90832e4e810

See more details on using hashes here.

File details

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

File metadata

  • Download URL: mintoken-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 17.8 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6d2811d769825138b0269924dffd006a89858e34765913c317ef6a19f1b63cf9
MD5 d1a7db51af5e6dd3a6e6f16f1d0dd060
BLAKE2b-256 f1080bbb08358fce492a009fa857159760efde4281c0248353e8914f716b5398

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