RTK — CLI-прокси для снижения расхода токенов LLM на 60–90%
📂 Исходный код на GitHubCLI-прокси на Rust для фильтрации и сжатия вывода команд перед отправкой в контекст LLM. Поддерживает 14 AI-агентов, 100+ команд, экономит 60–90% токенов.
RTK (Rust Token Killer) — это CLI-прокси, написанный на Rust, который перехватывает вывод консольных команд и сжимает его перед тем, как тот попадёт в контекст LLM. Результат — экономия 60–90% токенов на типичных операциях разработки. Одиночный бинарник без зависимостей, 100+ поддерживаемых команд, накладные расходы менее 10 мс.
Репозиторий: github.com/rtk-ai/rtk. 59k звёзд, лицензия Apache 2.0.
Зачем это нужно
AI-ассистенты кодинга постоянно выполняют команды в терминале: git status, cargo test, ls, grep. Вывод этих команд целиком отправляется в контекст LLM, что приводит к быстрому расходу токенов. git push генерирует ~200 токенов многострочного вывода, хотя достаточно одного ok main. cargo test при ошибках выдаёт 200+ строк — RTK сжимает их до ~20.
Как это работает
RTK встраивается между AI-агентом и оболочкой, перехватывая Bash-команды и переписывая их в свои эквиваленты:
Без RTK: С RTK:
Claude --git status--> shell --> git Claude --git status--> RTK --> git
^ | ^ | |
| ~2,000 токенов (raw) | | ~200 токенов | filter |
+--------------------------------+ +------ (filtered) ----+--------+
Четыре стратегии сжатия, применяемые в зависимости от типа команды:
- Smart Filtering — удаляет шум (комментарии, пробелы, boilerplate)
- Grouping — агрегирует однотипные элементы (файлы по директориям, ошибки по типу)
- Truncation — оставляет релевантный контекст, отсекает избыточное
- Deduplication — сворачивает повторяющиеся строки логов с подсчётом
Экономия токенов (30-минутная сессия Claude Code)
| Операция | Частота | Без RTK | С RTK | Экономия |
|---|---|---|---|---|
ls / tree |
10x | 2,000 | 400 | -80% |
cat / read |
20x | 40,000 | 12,000 | -70% |
grep / rg |
8x | 16,000 | 3,200 | -80% |
git status |
10x | 3,000 | 600 | -80% |
git diff |
5x | 10,000 | 2,500 | -75% |
git log |
5x | 2,500 | 500 | -80% |
git add/commit/push |
8x | 1,600 | 120 | -92% |
cargo test / npm test |
5x | 25,000 | 2,500 | -90% |
ruff check |
3x | 3,000 | 600 | -80% |
pytest |
4x | 8,000 | 800 | -90% |
go test |
3x | 6,000 | 600 | -90% |
docker ps |
3x | 900 | 180 | -80% |
| Итого | ~118,000 | ~23,900 | -80% |
Поддерживаемые AI-агенты
RTK работает с 14 AI-инструментами кодинга:
| Инструмент | Установка | Метод |
|---|---|---|
| Claude Code | rtk init -g |
PreToolUse hook |
| GitHub Copilot (VS Code) | rtk init -g --copilot |
PreToolUse hook |
| Cursor | rtk init -g --agent cursor |
preToolUse hook |
| Gemini CLI | rtk init -g --gemini |
BeforeTool hook |
| Codex (OpenAI) | rtk init -g --codex |
AGENTS.md + RTK.md |
| Windsurf | rtk init -g --agent windsurf |
.windsurfrules |
| Cline / Roo Code | rtk init --agent cline |
.clinerules |
| OpenCode | rtk init -g --opencode |
Plugin TS |
| Hermes | rtk init --agent hermes |
Python plugin adapter |
| Pi | rtk init -g --agent pi |
TypeScript extension |
| Kilo Code | rtk init --agent kilocode |
.kilocode/rules/ |
| Google Antigravity | rtk init -g --agent antigravity |
.agents/rules/ |
Hook автоматически переписывает Bash-команды — например, git status превращается в rtk git status до выполнения. Агент получает сжатый вывод, не вызывая rtk явно.
Основные команды
Файлы
rtk ls . # Оптимизированное дерево директорий
rtk read file.rs # Умное чтение файла
rtk read file.rs -l aggressive # Только сигнатуры (без тел функций)
rtk smart file.rs # 2-строчное эвристическое описание кода
rtk find "*.rs" . # Компактный поиск файлов
rtk grep "pattern" . # Сгруппированные результаты поиска
rtk diff file1 file2 # Сжатый diff
Git
rtk git status # Компактный статус
rtk git log -n 10 # Однострочные коммиты
rtk git diff # Сжатый diff
rtk git add # -> S0
rtk git commit -m "msg" # -> S2
rtk git push # -> S3
rtk git pull # -> S4
Тест-раннеры
rtk pytest # Python-тесты (-90%)
rtk cargo test # Cargo-тесты (-90%)
rtk go test # Go-тесты (-90%)
rtk jest # Jest (только ошибки)
rtk vitest # Vitest (только ошибки)
rtk playwright test # E2E-результаты (только ошибки)
rtk rspec # RSpec (-60%+)
rtk test <cmd> # Универсальная обёртка — только ошибки
Сборка и линтинг
rtk lint # ESLint, сгруппировано по правилу/файлу
rtk tsc # TypeScript-ошибки, сгруппированы по файлу
rtk next build # Next.js сборка (компактно)
rtk cargo build # Cargo build (-80%)
rtk cargo clippy # Cargo clippy (-80%)
rtk ruff check # Python-линтинг (-80%)
rtk golangci-lint run # Go-линтинг (-85%)
rtk rubocop # Ruby-линтинг (-60%+)
Контейнеры и облако
rtk docker ps # Компактный список контейнеров
rtk docker logs <container> # Дедуплицированные логи
rtk kubectl pods # Компактный список подов
rtk aws ec2 describe-instances # Компактный список инстансов
rtk aws lambda list-functions # Имя/runtime/memory
Аналитика экономии
rtk gain # Сводная статистика
rtk gain --graph # ASCII-график за 30 дней
rtk gain --daily # Разбивка по дням
rtk discover # Найти упущенные возможности экономии
rtk session # Показать внедрение RTK в сессиях
Примеры сжатия
Листинг директории:
# ls -la (45 строк, ~800 токенов) # rtk ls (12 строк, ~150 токенов)
drwxr-xr-x 15 user staff 480 ... my-project/
-rw-r--r-- 1 user staff 1234 ... +-- src/ (8 files)
... | +-- main.rs
+-- Cargo.toml
Git push:
# git push (~200 токенов) # rtk git push (~10 токенов)
Enumerating objects: 5, done. ok main
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
...
Тесты:
# cargo test (200+ строк при ошибке) # rtk test cargo test (~20 строк)
running 15 tests FAILED: 2/15 tests
test utils::test_parse ... ok test_edge_case: assertion failed
test utils::test_format ... ok test_overflow: panic at utils.rs:18
...
Установка
Через Homebrew:
brew install rtk
Быстрая установка (Linux/macOS):
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
Через Cargo:
cargo install --git https://github.com/rtk-ai/rtk
Готовые бинарники доступны на странице релизов для macOS, Linux и Windows.
Быстрый старт
rtk init -g # Claude Code / Copilot
rtk init -g --gemini # Gemini CLI
rtk init -g --codex # Codex (OpenAI)
rtk init -g --agent cursor # Cursor
После установки перезапустите AI-инструмент. Команды Bash будут автоматически перезаписываться через hook.
Конфигурация
Файл ~/.config/rtk/config.toml (macOS: ~/Library/Application Support/rtk/config.toml):
[hooks]
exclude_commands = ["curl", "playwright"]
[tee]
enabled = true
mode = "failures"
При падении команды RTK сохраняет полный вывод, чтобы LLM мог его прочитать без повторного выполнения:
FAILED: 2/15 tests
[full output: ~/.local/share/rtk/tee/1707753600_cargo_test.log]
Приватность
Телеметрия отключена по умолчанию и требует явного согласия. Собираются только анонимные агрегированные метрики: количество команд, сэкономленные токены, тип AI-агента. Никакого исходного кода, путей к файлам, аргументов команд, секретов или персональных данных.
rtk telemetry status # Проверить состояние
rtk telemetry enable # Дать согласие
rtk telemetry disable # Отозвать согласие
rtk telemetry forget # Удалить все данные
Ссылки
Источник: https://github.com/rtk-ai/rtk