RTK — CLI-прокси для снижения расхода токенов LLM на 60–90%

· 3 мин чтения
tokens cli rust optimization ai-coding
📂 Исходный код на GitHub

CLI-прокси на Rust для фильтрации и сжатия вывода команд перед отправкой в контекст LLM. Поддерживает 14 AI-агентов, 100+ команд, экономит 60–90% токенов.

RTK — CLI-прокси для снижения расхода токенов LLM на 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) ----+--------+

Четыре стратегии сжатия, применяемые в зависимости от типа команды:

  1. Smart Filtering — удаляет шум (комментарии, пробелы, boilerplate)
  2. Grouping — агрегирует однотипные элементы (файлы по директориям, ошибки по типу)
  3. Truncation — оставляет релевантный контекст, отсекает избыточное
  4. 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