RTK (Rust Token Killer) to jedno z dwóch narzędzi, które na stałe trzymam w konfiguracji Claude Code. Ale jego ograniczenie jest proste: działa tylko na Bash. Wbudowane Read/Grep/Glob go omijają. Tu opisuję, co dokładnie instaluje rtk init, jak czytać rtk gain i jak obejść trzy błędy, na które trafiłem.

Wracamy do głównego artykułu: Claude Code: jak przestać palić tokeny.

Matryca instalacji dla systemów

RTK oferuje cztery ścieżki instalacji, ale nie każda działa wszędzie tak samo.

MetodamacOSLinuxWindowsZalecane?
brew install rtktaktak (Linuxbrew)niena macOS tak
curl install.shtaktakniena Linuksie tak
cargo install --gittaktaktakgdy masz zestaw narzędzi Rusta
cargo install rtk (crates.io)NIENIENIEto inny projekt!

Kolizja nazwy to najczęstszy problem. Na crates.io nazwę rtk zajmuje reachingforthejack/rtk (Rust Type Kit), zupełnie inny projekt. Jeśli zobaczysz “command not found” po cargo install rtk, albo rtk gain zwróci błąd składni, masz zainstalowany zły plik wykonywalny.

# Weryfikacja:
rtk --version    # powinien pokazać: rtk 0.37.2 (lub wyżej)
rtk gain         # powinien pokazać statystyki, nie pomoc argumentów
which rtk        # sprawdź ścieżkę: /opt/homebrew/bin/rtk, ~/.cargo/bin/rtk itd.

# Jak trafiłeś na zły:
cargo uninstall rtk
cargo install --git https://github.com/rtk-ai/rtk

Windows bez WSL działa w trybie awaryjnym: RTK zainstaluje skrypt bash, ale hook nie będzie automatycznie przepisywać komend. Na Windowsie RTK ma sens dopiero w WSL2.

Co wrzuca rtk init -g

rtk init -g

Ta jedna komenda robi trzy rzeczy:

  1. Dokleja hook do ~/.claude/settings.json (globalnie, wszystkie projekty)
  2. Tworzy ~/.claude/RTK.md, skróconą instrukcję, którą Claude czyta w każdej sesji
  3. Kopiuje rtk-rewrite.sh do ~/.claude/hooks/

Fragment settings.json, który dostajesz:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/rtk-rewrite.sh"
          }
        ]
      }
    ]
  }
}

Najważniejsze: matcher to Bash i tylko Bash. Każde wywołanie narzędzia Bash przez Claude’a przechodzi przez skrypt, który sprawdza, czy komenda ma wariant RTK, i jeśli tak, przepisuje ją. Read, Grep, Glob, WebFetch, Task omijają ten hook.

Jeśli wolisz tylko hook bez RTK.md:

rtk init -g --hook-only

To dobra opcja, gdy i tak masz już przeciążony globalny CLAUDE.md.

Czego RTK nie dotyka (i dlaczego)

Claude Code często używa swoich wbudowanych narzędzi zamiast Basha:

  • Read file.txt (wbudowane, nie Bash)
  • Grep "pattern" --glob "*.ts" (wbudowane)
  • Glob "**/*.rs" (wbudowane)

Żadne z powyższych nie przechodzi przez RTK. Jeśli twój Claude dużo czyta plików bezpośrednio (a tak domyślnie działa), RTK pomoże tylko tam, gdzie model sam decyduje się użyć Basha (np. git, cargo, docker, kubectl, gh, ls w konkretnych przypadkach).

W praktyce: jeśli chcesz, żeby cat file.rs poszedł przez RTK, trzeba popchnąć Claude’a do użycia Basha. Sam z siebie woli Read, więc oszczędność na cat z tabelki RTK trzeba traktować jako pułap teoretyczny, a nie wartość, którą zobaczysz w swojej sesji.

rtk gain: jak czytać statystyki

rtk gain

Wyjście wygląda mniej więcej tak:

Total commands intercepted: 142
Total tokens saved: ~48,700
Average reduction: 73%
Top commands by savings:
  git status     × 18    -80%
  cargo test     × 5     -91%
  git diff       × 12    -76%
  ...

Average reduction to średnia ważona na komendę, nie na sesję. Dla całej sesji 80% to zazwyczaj liczba zawyżona. Realnie zobaczysz może 30-50%, bo RTK łapie tylko część operacji.

Ciekawsze flagi:

rtk gain --history --daily    # agregacja dzienna
rtk gain --history --weekly   # agregacja tygodniowa
rtk gain --graph              # ASCII wykres w terminalu

rtk discover analizuje logi sesji Claude Code i pokazuje komendy, które mógł przepisać, ale ich nie dostał, bo poszły przez wbudowane narzędzia. To dobry sprawdzian, na ile RTK faktycznie u ciebie działa.

Trzy błędy, na które trafisz najprędzej

rtk ls zwraca pusty ciąg znaków (#1418)

Potwierdzone na Fedora 43, czasem Arch. Obejście: zamiast rtk ls . używaj rtk find . -maxdepth 2 -type f albo po prostu zostaw ls bez RTK.

rtk cat emituje ANSI do strumienia non-TTY (#1409)

Claude Code nie jest prawdziwym TTY. RTK powinien to wykrywać i wyłączać kolory, ale w kilku wersjach tego nie robi. Efekt: do kontekstu trafiają sekwencje sterujące (\x1b[32m, \x1b[0m), które same zjadają tokeny. Obejście do czasu poprawki:

TERM=dumb rtk cat file.rs

albo użyj standardowego cat, dopóki nie ma poprawki.

rtk rg zamieniane na grep zwiększa użycie tokenów (#1385, #1367)

To najbardziej kontrintuicyjny błąd. RTK w niektórych ścieżkach zamienia rg (ripgrep) na grep, który nie ma inteligentnego grupowania RTK. Efekt: wyjście rośnie zamiast maleć. Jeśli widzisz w rtk gain --history, że rg ma ujemne oszczędności, to właśnie ten przypadek.

Obejście:

rtk proxy rg "pattern"   # przepuszcza bez transformacji

Kiedy RTK nie pomoże wcale

Sesje, w których RTK daje <20% realnej oszczędności:

  • Dużo czytania plików: Claude woli Read, RTK tego nie łapie
  • Przeszukiwanie kodu: wbudowane Grep/Glob
  • Zadania UI/frontendu: głównie edycje, niewiele wywołań narzędzi
  • Dyskusje architektoniczne: prawie brak Basha

Sesje, w których RTK błyszczy:

  • Debugowanie CI/CD: dużo gh run, docker logs, kubectl
  • Praca w rytmie TDD: cargo test, pytest, vitest w pętli
  • Refaktoryzacja wieloplikowa z testami: cargo check po każdej zmianie
  • Procesy silnie oparte na Gicie: status, diff, log, show

Jeśli twój profil sesji to głównie pierwsza lista, RTK nie będzie przełomem.

Odinstalowanie

Jeśli chcesz wycofać wszystko:

# Usuń hook z settings.json ręcznie (edytor) albo:
rtk init -g --uninstall

# Usuń binarkę:
brew uninstall rtk
# lub: cargo uninstall rtk
# lub: rm ~/.local/bin/rtk

# Opcjonalnie usuń RTK.md i historię:
rm ~/.claude/RTK.md
rm -rf ~/.claude/rtk/   # cache i historia gain

Sprawdź, czy Claude Code uruchamia się bez błędów hooków:

claude --version
# powinno startować czysto, bez komunikatów o missing rtk-rewrite.sh

RTK a Context Mode: kiedy które

Oba mogą rozwiązać ten sam przypadek użycia (duży wolumen danych z terminala), ale robią to inaczej.

AspektRTKContext Mode
LicencjaApache 2.0Elastic License 2.0 (source-available)
Instalacjabrew / curl / cargo/plugin install
Zakres hookówtylko BashBash + Read + Grep + WebFetch + Task
Sandboxbrak, kompresja na miejscuosobny proces (izolacja)
Typowe zastosowaniegit, cargo, docker, uruchamianie testówduże JSON, logi, GitHub API
Realna redukcja30-50% całej sesji60-98% na zadaniach z dużą ilością danych
Słabe punktykolizja nazwy, błędy ls/catosierocone procesy MCP, XSS #293

Prosta zasada: jeśli 80% twojego bólu to testy i git, weź RTK. Jeśli 80% to pobieranie danych z API i parsowanie logów, weź Context Mode. Oba na raz to konflikt hooków, więc ich nie łącz.


Wracając do głównego artykułu: Claude Code: jak przestać palić tokeny. Alternatywy i porównanie z Caveman Claude rozkładam w analizie liczb Cavemana.