RTK (Rust Token Killer): как сэкономить 60–90% токенов в Claude Code

RTK Rust Token Killer для Claude Code

Полный гайд по установке, настройке и подключению через PreToolUse hook. Меньше токенов — меньше затрат, длиннее контекст.

Что такое RTK (Rust Token Killer)?

RTK — это CLI-прокси, написанный на Rust, который встаёт между терминалом и Claude Code. Он перехватывает вывод инструментов — git, cargo, npm, pytest, jest, gradle, make и других — и сжимает его до минимально необходимого.

Идея простая: когда Claude Code запускает команду, он получает не стену текста на 300 строк, а концентрированную выжимку из 20–30 строк с той же смысловой нагрузкой. Claude не видит разницы — для него это просто вывод команды. Но токенов тратится в разы меньше.

Средняя компрессия по бенчмаркам команды RTK: 89%. То есть из 1000 токенов вывода до Claude доходит ~110.

Репозиторий: https://github.com/rtk-ai/rtk

Что именно делает RTK

Почему токены — это проблема

Что такое context window

Claude Code работает в рамках context window — ограниченного буфера памяти сессии. В claude-sonnet-4.6 это 200 000 токенов входных данных. Звучит как много, но в реальном dev-проекте этот лимит исчерпывается быстро: история диалога, код файлов, вывод инструментов — всё это суммируется.

Когда контекст переполняется, Claude Code либо обрезает историю (и теряет важный контекст), либо сессия завершается с ошибкой. В обоих случаях — потеря работы и токены на ветер.

Сколько стоят токены

На момент написания гайда цены Anthropic API:

При активной разработке с частыми запусками тестов, билдов и диффов — расходы на токены быстро доходят до $50–200 в месяц на одного разработчика. RTK позволяет снизить этот счёт пропорционально степени сжатия.

Как dev-команды засоряют контекст

Типичные сценарии, когда контекст раздувается:

89% средняя компрессия
10× длиннее сессия
0мс задержка для Claude
8+ поддерживаемых инструментов

Реальный кейс: проект с активными тестами и частыми git diff тратил ~180k токенов в сутки. После подключения RTK — 22k токенов. Экономия 87%.

Как работает RTK

Прозрачная подмена

RTK работает как прозрачный прокси. Он не меняет интерфейс и не требует правок в коде. Вы настраиваете его один раз через Claude Code hooks — и дальше всё происходит автоматически.

Схема работы:

  1. Claude Code запускает команду через Bash tool (например, cargo test)
  2. PreToolUse hook перехватывает вызов и передаёт команду через RTK
  3. RTK запускает реальную команду, получает полный вывод
  4. RTK применяет rule-based и ML-сжатие под конкретный инструмент
  5. Claude Code получает сжатый вывод — и думает, что это оригинал

Движок сжатия

Для каждого инструмента в RTK есть свой набор правил. Это не просто truncate — это умная фильтрация:

Claude не видит разницы

Для Claude Code RTK невидим. С его точки зрения команда просто вернула более лаконичный вывод. Никаких специальных инструкций в промпт добавлять не нужно. RTK не влияет на качество ответов — Claude по-прежнему видит все ошибки, все фейлы, все ключевые результаты.

Установка RTK

Способ 1: через cargo (рекомендуется)

Если у вас установлен Rust и cargo — самый простой способ:

cargo install rtk

После установки бинарник появится в ~/.cargo/bin/rtk. Убедитесь, что эта директория в вашем PATH:

echo $PATH | grep cargo
# если пусто:
export PATH="$HOME/.cargo/bin:$PATH"
# добавьте строку в ~/.bashrc или ~/.zshrc

Способ 2: через Homebrew (macOS)

brew tap rtk-ai/rtk
brew install rtk

Способ 3: скачать бинарник

На странице релизов GitHub доступны готовые бинарники для Linux (x86_64, aarch64), macOS (Intel, Apple Silicon) и Windows:

# Linux x86_64
curl -L https://github.com/rtk-ai/rtk/releases/latest/download/rtk-linux-x86_64.tar.gz | tar xz
sudo mv rtk /usr/local/bin/

# macOS Apple Silicon
curl -L https://github.com/rtk-ai/rtk/releases/latest/download/rtk-macos-aarch64.tar.gz | tar xz
sudo mv rtk /usr/local/bin/

Проверка установки

rtk --version
# RTK 0.4.2 (Rust Token Killer)

rtk --help
# Usage: rtk [OPTIONS] <COMMAND>
# Options:
#   --mode <MODE>     Compression mode: auto|strict|minimal [default: auto]
#   --max-tokens <N>  Output token limit [default: 2000]
#   --raw             Disable compression (passthrough)
#   -h, --help        Print help

Быстрый тест

# запустите команду через rtk и сравните вывод
rtk cargo test 2>&1 | wc -l
cargo test 2>&1 | wc -l
# разница наглядно покажет степень сжатия

RTK написан на Rust и работает без внешних зависимостей. Бинарник статически слинкован — никаких runtime зависимостей.

Настройка с Claude Code hooks

Самый мощный способ использовать RTK — подключить его через PreToolUse hook в Claude Code. Тогда все Bash-вызовы автоматически проходят через RTK без каких-либо ручных действий.

Где находится конфиг hooks

Claude Code хранит настройки hooks в файле:

# глобальный (для всех проектов)
~/.claude/settings.json

# или локальный (только для текущего проекта)
.claude/settings.json

Базовый конфиг: оборачиваем все Bash-команды

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "rtk-hook"
          }
        ]
      }
    ]
  }
}

Скрипт rtk-hook

Создайте скрипт rtk-hook и положите его в /usr/local/bin/ или ~/.local/bin/:

#!/bin/bash
# rtk-hook — PreToolUse hook для Claude Code
# Читает JSON из stdin, оборачивает команду через RTK

INPUT=$(cat)
CMD=$(echo "$INPUT" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('tool_input',{}).get('command',''))")

if [ -z "$CMD" ]; then
  echo "$INPUT"
  exit 0
fi

# Определяем нужен ли RTK для этой команды
NEEDS_RTK=false
for TOOL in git cargo npm npx pytest jest make gradle; do
  if echo "$CMD" | grep -qE "^$TOOL\b|^\s*$TOOL\b"; then
    NEEDS_RTK=true
    break
  fi
done

if [ "$NEEDS_RTK" = "true" ]; then
  # Модифицируем команду — добавляем rtk перед ней
  NEW_CMD="rtk $CMD"
  echo "$INPUT" | python3 -c "
import sys, json
d = json.load(sys.stdin)
d['tool_input']['command'] = '$NEW_CMD'
print(json.dumps(d))
"
else
  echo "$INPUT"
fi
chmod +x /usr/local/bin/rtk-hook

Альтернатива: нативная интеграция через rtk init

Начиная с версии 0.4.0, RTK поддерживает команду автонастройки:

# автоматически пропишет себя в ~/.claude/settings.json
rtk init --claude-code

# проверить что настроилось
rtk status

Тонкая настройка через .rtk.toml

В корне проекта можно создать файл .rtk.toml с настройками под проект:

[global]
mode = "auto"          # auto | strict | minimal | off
max_tokens = 2000      # максимум токенов в выводе
preserve_errors = true # всегда показывать ошибки полностью

[tools.cargo]
mode = "strict"
show_only_failures = true
max_tokens = 500

[tools.git]
mode = "auto"
diff_context_lines = 2    # строк контекста вокруг изменений (дефолт: 3)

[tools.npm]
mode = "strict"
hide_progress = true
hide_warnings = false

[tools.pytest]
mode = "strict"
show_only_failures = true
show_summary = true

Важно: режим strict агрессивно сжимает. Если Claude Code часто "не видит" важных деталей в выводе — переключитесь на auto или увеличьте max_tokens.

Примеры сжатия

npm install

До (без RTK) — ~180 строк
npm warn deprecated inflight@1.0.6
npm warn deprecated glob@7.2.3
npm warn deprecated rimraf@3.0.2
...
added 847 packages, and audited 848 packages in 23s
...
[██████████████████████████████] 100%
...
248 packages are looking for funding
  run `npm fund` for details
8 vulnerabilities (2 moderate, 6 high)
...
После (RTK) — 4 строки
added 847 packages in 23s
8 vulnerabilities (2 moderate, 6 high)
run: npm audit fix
run: npm fund (248 packages)

cargo test

До (без RTK) — ~240 строк
   Compiling myapp v0.1.0
    Finished test [unoptimized + debuginfo]
     Running unittests src/main.rs

running 47 tests
test auth::test_valid_token ... ok
test auth::test_expired_token ... ok
test db::test_connection ... ok
... (44 строки "ok")
test db::test_transaction ... FAILED

failures:
---- db::test_transaction stdout ----
thread 'db::test_transaction' panicked at 'assertion failed'
src/db.rs:142:5
note: run with RUST_BACKTRACE=1...

test result: FAILED. 46 passed; 1 failed
После (RTK) — 7 строк
running 47 tests
[46 passed, skipped]

FAILED: db::test_transaction
  src/db.rs:142: assertion failed
  'assert_eq!(result, Ok(()))'

test result: FAILED. 46 passed; 1 failed

git diff (большой PR)

До (без RTK) — ~600 строк
diff --git a/src/api.rs b/src/api.rs
index 3a2f1c4..9b8d2e1 100644
--- a/src/api.rs
+++ b/src/api.rs
@@ -1,5 +1,5 @@
 use crate::auth;
 use crate::db;
-use std::collections::HashMap;
+use std::collections::{HashMap, BTreeMap};
 use serde::{Serialize, Deserialize};

... (580 строк неизменённого контекста)
После (RTK) — 18 строк
src/api.rs (+12/-8):
  L3: HashMap → HashMap, BTreeMap
  L47: added fn validate_input()
  L89: removed legacy auth check
  L134-141: refactored error handling

src/models.rs (+3/-0):
  L22: added #[derive(BTreeMap)]

[3 files changed, 15 insertions(+), 8 deletions(-)]

Совместимость

RTK поддерживает следующие инструменты из коробки:

git
cargo
npm / npx
pytest
jest
gradle
make
docker
go test
mvn
pnpm
yarn

Для неподдерживаемых команд RTK работает в режиме auto — применяет универсальные фильтры (удаление ANSI, схлопывание повторов, обрезка по лимиту токенов).

Платформы

Минимальные требования

FAQ

RTK не пропустит важные ошибки?

Нет. По умолчанию включён флаг preserve_errors = true — все строки с ERROR, FAILED, panic!, exception, traceback всегда передаются полностью, независимо от режима сжатия.

Влияет ли RTK на качество ответов Claude?

Практически нет. Claude видит все ключевые данные — результаты тестов, ошибки, summary. Убирается только мусор: прогресс-бары, дублирующиеся строки, неизменённый контекст в диффах. По факту качество даже растёт — Claude не тонет в шуме.

Можно ли использовать RTK без Claude Code, просто в терминале?

Да. RTK — обычная CLI-утилита. rtk cargo test запустит тесты и выведет сжатый результат прямо в терминал. Удобно для чтения длинных логов глазами.

Работает ли RTK с claude-opus и claude-haiku?

Да, RTK независим от модели. Он работает на уровне вывода команд — до того как текст попадает в Claude. Подходит для любой модели Anthropic и совместим с OpenAI-совместимыми API.

Как отключить RTK для конкретной команды?

Используйте флаг --raw: rtk --raw cargo test запустит команду без какого-либо сжатия. Либо добавьте исключение в .rtk.toml: [tools.mycommand] mode = "off".

Есть ли платная версия RTK?

RTK распространяется по MIT-лицензии — полностью бесплатно и open source. На claudeskillsmarket.xyz можно получить готовый скилл с настроенным конфигом через бота — это просто удобная обёртка, не платный продукт.

RTK замедляет выполнение команд?

Нет заметного замедления. RTK написан на Rust и работает асинхронно — overhead составляет 1–5мс на команду. Для длинных команд (тесты, билды) это абсолютно незаметно.

Где скачать RTK бесплатно

Скачать RTK бесплатно можно прямо в нашем боте @claudeskillsmarketbot — команда /start rtkfree.

На сайте claudeskillsmarket.xyz20+ скиллов для Claude Code: бесплатные и платные. RTK-конфиги, хуки, агенты для реальных задач.

Claude Skills Market →

Также доступны исходники на GitHub: github.com/rtk-ai/rtk