Self-Learning · Open Source

Cut your Claude Code bill.
It learns what to block.

Blocks wasteful tool calls before they execute. Filters bloated API responses on the wire. Gets smarter every session from its own mistakes.

Tokens saved this session: 0 |
terminal
$ claude-turbo install
Hooks: added for Read, Bash, Grep, Glob
Proxy: running on 127.0.0.1:9847
Model: v1 (7 heuristics, self-tuning)
$ claude # that's it. savings are automatic.
60-90%
Token savings on repeated ops
3 layers
Hook + Proxy + Model
<5ms
Per-call overhead
0 config
Works immediately

Not an output trimmer.
A system that improves itself.

Other tools compress what already happened. This one prevents waste before it executes, and tunes itself from real usage data.

Pre-execution interception

Hooks fire before the tool call runs. A blocked read costs zero tokens. Other tools can only trim after the damage is done.

PreToolUse hook → deny/rewrite → 0 tokens wasted
🌐

Wire-level response filtering

A local proxy strips SSE heartbeats, base64 images, and bloated tool results before they hit your context window.

SSE stream filter → ~2KB keep → rest dropped
🧠

Self-tuning from overrides

When Claude retries a denied call, that's a false positive. The system detects it, reports it, and the model adjusts weights and thresholds automatically.

override / fires = FP rate → retune weights

Every override makes it smarter

Most tools are static. claude-turbo has a feedback loop that tunes itself from aggregate usage data across all clients.

CLIENT Your machine

1

Deny a tool call (e.g., redundant file read)

2

Detect override — Claude retries same args within 60s? That's a false positive.

3

Record override count per heuristic in cumulative stats

7

Apply new model params — thresholds shift, weights change, bad heuristics get disabled

sync telemetry
pull params

SERVER Ingest + Retune

4

Aggregate fires + overrides across all clients

5

Compute FP rate per heuristic. >30% = penalize, <5% = boost.

6

Retune — adjust weights AND thresholds. High FP on H1? Allow 2 re-reads instead of 1.

Three layers of savings

Hook layer blocks waste upfront. Proxy layer filters the wire. Model layer tunes everything from evidence.

your tools
Claude Code
PreToolUse
Hook Layer
SSE filter
Proxy Layer
upstream
Anthropic API
↓ telemetry
retune
Ingest Server
updated
Model Params
~2,000 lines · <5ms per call · file-based state · no daemon required · MIT licensed

10 interception points

7 hook heuristics block waste upfront. 3 proxy filters clean the wire. All thresholds tunable from the server.

H1
Redundant file readSame file read twice in a session? Denied with context. Threshold: tunable (default 1).
H2
Large file read>300 lines without offset/limit? Denied. Tells Claude to use Grep or specify a range.
H3
Unscoped test runBare cargo test / pytest? Rewrites to scope to the active test.
H4
Duplicate bash commandSame go build / cargo check twice? Denied. Output hasn't changed.
H5
Redundant searchSame Grep/Glob pattern+path in one session? Denied with context pointer.
H6
Unscoped git logNo bounds? Rewrites to --oneline -20. Limit tunable from server.
H7
Recursive listingls -R / unbounded find? Pipes through head -50.
P1
SSE heartbeat stripEmpty bash_progress events dropped at the wire. Zero tokens.
P2
Base64 image stripdata:image/... payloads replaced with placeholder. Saves 10K+ tokens per image.
P3
Large result truncationTool results >8KB truncated to 2KB + notice. Threshold tunable from server.

Real numbers from real sessions

$8.40/hr

"Heavy refactoring session with Opus. claude-turbo blocked 47 redundant reads and 12 duplicate builds."

3-hour session, 180K tokens saved
3.2x

"Context window lasted 3x longer before /compact. The hook caught every re-read of my 800-line config file."

Long debugging session with Opus
91%

"Hit rate after a week. The model tuned H1 threshold to 2 for my workflow. Zero false positives since."

Daily user, self-tuned model params

Open source. Auditable.
Your code never leaves your machine.

claude-turbo runs locally and intercepts tool calls on your own machine. The only thing that ever goes to our server is a handful of counters — and even that you can turn off in one line.

What gets sent telemetry

  • A random 128-bit client ID generated on first run (not tied to email, IP, hostname, or OS user)
  • Version string and platform (macos, linux, windows)
  • Counters: tokens saved, tool calls intercepted, tool calls invoked
  • Per-heuristic fire counts and override counts (drives the retune loop)
  • Daily rollups of the above for the last 14 days
  • A boolean for whether the local proxy is running

What never leaves your machine never

  • File paths, file contents, or anything you Read
  • Prompts, conversations, or messages to/from Claude
  • Bash commands, their arguments, or their output
  • Grep / Glob patterns or search results
  • Your Anthropic API key, OAuth token, or any credential
  • Hostname, IP address, user name, working directory, git remote
The entire telemetry payload — nothing else is sent
// POST https://api.claude-turbo.xyz/v1/telemetry
{
  "client_id": "a3f2c8d19e4b7f60c1d8e2a5f9b4c7e1",   // random, local
  "version": "0.3.0",
  "platform": "macos",
  "days_active": 12,
  "total_tokens_saved": 184320,
  "total_interceptions": 247,
  "total_invocations": 1893,
  "heuristic_totals": { "H1_redundant_read": 94, "H4_duplicate_bash": 38, /* ... */ },
  "heuristic_overrides": { "H1_redundant_read": 2, /* ... */ },
  "daily": [ { "date": "2026-04-11", "tokens_saved": 12840, /* ... */ } ],
  "proxy_running": true
}
Turn telemetry off One line in ~/.claude-turbo/config.json: "telemetry_enabled": false
Run your own server The ingest server is in the same repo. Point the client at it: "telemetry_url": "https://your.host"
Read every line 100% MIT on GitHub. Client, server, heuristics, proxy filters — all of it. github.com/blasrodri/claude-turbo

Stop wasting tokens.
Let the model learn for you.

Two commands. No config. Gets smarter every session.

cargo install claude-turbo && claude-turbo install
Installs hooks + starts proxy. No config needed. See README for all install options →