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 instalujertk init, jak czytaćrtk gaini 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.
| Metoda | macOS | Linux | Windows | Zalecane? |
|---|---|---|---|---|
brew install rtk | tak | tak (Linuxbrew) | nie | na macOS tak |
curl install.sh | tak | tak | nie | na Linuksie tak |
cargo install --git | tak | tak | tak | gdy masz zestaw narzędzi Rusta |
cargo install rtk (crates.io) | NIE | NIE | NIE | to 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:
- Dokleja hook do
~/.claude/settings.json(globalnie, wszystkie projekty) - Tworzy
~/.claude/RTK.md, skróconą instrukcję, którą Claude czyta w każdej sesji - Kopiuje
rtk-rewrite.shdo~/.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,vitestw pętli - Refaktoryzacja wieloplikowa z testami:
cargo checkpo 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.
| Aspekt | RTK | Context Mode |
|---|---|---|
| Licencja | Apache 2.0 | Elastic License 2.0 (source-available) |
| Instalacja | brew / curl / cargo | /plugin install |
| Zakres hooków | tylko Bash | Bash + Read + Grep + WebFetch + Task |
| Sandbox | brak, kompresja na miejscu | osobny proces (izolacja) |
| Typowe zastosowanie | git, cargo, docker, uruchamianie testów | duże JSON, logi, GitHub API |
| Realna redukcja | 30-50% całej sesji | 60-98% na zadaniach z dużą ilością danych |
| Słabe punkty | kolizja nazwy, błędy ls/cat | osierocone 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.