Полный гайд по установке, настройке и подключению через PreToolUse hook. Меньше токенов — меньше затрат, длиннее контекст.
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
Claude Code работает в рамках context window — ограниченного буфера памяти сессии. В claude-sonnet-4.6 это 200 000 токенов входных данных. Звучит как много, но в реальном dev-проекте этот лимит исчерпывается быстро: история диалога, код файлов, вывод инструментов — всё это суммируется.
Когда контекст переполняется, Claude Code либо обрезает историю (и теряет важный контекст), либо сессия завершается с ошибкой. В обоих случаях — потеря работы и токены на ветер.
На момент написания гайда цены Anthropic API:
При активной разработке с частыми запусками тестов, билдов и диффов — расходы на токены быстро доходят до $50–200 в месяц на одного разработчика. RTK позволяет снизить этот счёт пропорционально степени сжатия.
Типичные сценарии, когда контекст раздувается:
Реальный кейс: проект с активными тестами и частыми git diff тратил ~180k токенов в сутки. После подключения RTK — 22k токенов. Экономия 87%.
RTK работает как прозрачный прокси. Он не меняет интерфейс и не требует правок в коде. Вы настраиваете его один раз через Claude Code hooks — и дальше всё происходит автоматически.
Схема работы:
Для каждого инструмента в RTK есть свой набор правил. Это не просто truncate — это умная фильтрация:
Для Claude Code RTK невидим. С его точки зрения команда просто вернула более лаконичный вывод. Никаких специальных инструкций в промпт добавлять не нужно. RTK не влияет на качество ответов — Claude по-прежнему видит все ошибки, все фейлы, все ключевые результаты.
Если у вас установлен Rust и cargo — самый простой способ:
cargo install rtk
После установки бинарник появится в ~/.cargo/bin/rtk. Убедитесь, что эта директория в вашем PATH:
echo $PATH | grep cargo
# если пусто:
export PATH="$HOME/.cargo/bin:$PATH"
# добавьте строку в ~/.bashrc или ~/.zshrc
brew tap rtk-ai/rtk
brew install rtk
На странице релизов 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 зависимостей.
Самый мощный способ использовать RTK — подключить его через PreToolUse hook в Claude Code. Тогда все Bash-вызовы автоматически проходят через RTK без каких-либо ручных действий.
Claude Code хранит настройки hooks в файле:
# глобальный (для всех проектов)
~/.claude/settings.json
# или локальный (только для текущего проекта)
.claude/settings.json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "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
Начиная с версии 0.4.0, RTK поддерживает команду автонастройки:
# автоматически пропишет себя в ~/.claude/settings.json
rtk init --claude-code
# проверить что настроилось
rtk status
В корне проекта можно создать файл .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 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)
...
added 847 packages in 23s
8 vulnerabilities (2 moderate, 6 high)
run: npm audit fix
run: npm fund (248 packages)
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
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
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 строк неизменённого контекста)
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 поддерживает следующие инструменты из коробки:
Для неподдерживаемых команд RTK работает в режиме auto — применяет универсальные фильтры (удаление ANSI, схлопывание повторов, обрезка по лимиту токенов).
Нет. По умолчанию включён флаг preserve_errors = true — все строки с ERROR, FAILED, panic!, exception, traceback всегда передаются полностью, независимо от режима сжатия.
Практически нет. Claude видит все ключевые данные — результаты тестов, ошибки, summary. Убирается только мусор: прогресс-бары, дублирующиеся строки, неизменённый контекст в диффах. По факту качество даже растёт — Claude не тонет в шуме.
Да. RTK — обычная CLI-утилита. rtk cargo test запустит тесты и выведет сжатый результат прямо в терминал. Удобно для чтения длинных логов глазами.
Да, RTK независим от модели. Он работает на уровне вывода команд — до того как текст попадает в Claude. Подходит для любой модели Anthropic и совместим с OpenAI-совместимыми API.
Используйте флаг --raw: rtk --raw cargo test запустит команду без какого-либо сжатия. Либо добавьте исключение в .rtk.toml: [tools.mycommand] mode = "off".
RTK распространяется по MIT-лицензии — полностью бесплатно и open source. На claudeskillsmarket.xyz можно получить готовый скилл с настроенным конфигом через бота — это просто удобная обёртка, не платный продукт.
Нет заметного замедления. RTK написан на Rust и работает асинхронно — overhead составляет 1–5мс на команду. Для длинных команд (тесты, билды) это абсолютно незаметно.
Скачать RTK бесплатно можно прямо в нашем боте @claudeskillsmarketbot — команда /start rtkfree.
На сайте claudeskillsmarket.xyz — 20+ скиллов для Claude Code: бесплатные и платные. RTK-конфиги, хуки, агенты для реальных задач.
Claude Skills Market →Также доступны исходники на GitHub: github.com/rtk-ai/rtk