Como RTK Comprime a Saída dos Seus Comandos pra Coding Agents Gastarem Menos
Um proxy CLI em Rust que filtra output antes de chegar no LLM

Como o RTK Comprime a Saída dos Seus Comandos e Faz Coding Agents Gastarem Menos Contexto
Se você usa Claude Code, Codex ou qualquer coding agent no terminal, provavelmente já percebeu um detalhe importante: boa parte do contexto consumido pelo modelo não é o seu código. É o output dos comandos.
Um git log devolve dezenas de linhas formatadas. Um cargo test com dezenas de testes imprime centenas de linhas, mesmo quando quase tudo passa. Um docker ps retorna tabelas inteiras que o modelo precisa processar só para extrair uma informação simples.
Cada linha dessas entra no contexto. Isso significa mais tokens, menos espaço na janela e um agent mais lento para chegar no que realmente importa.
O RTK tenta resolver esse problema com uma ideia simples: ficar entre o coding agent e o terminal, interceptar a saída dos comandos, filtrar o ruído e devolver uma versão mais compacta.
O que é o RTK
O RTK (Rust Token Killer) é um binário em Rust que funciona como um proxy CLI entre o coding agent e o terminal.
Na prática, quando o agent executa um comando como git status, o RTK pode interceptar essa chamada, rodar o comando real, comprimir a saída e devolver uma resposta mais enxuta.
Segundo a documentação do projeto, a proposta é reduzir o volume de contexto consumido por outputs verbosos sem quebrar o fluxo normal de trabalho. O projeto é open source, usa licença MIT, está em desenvolvimento ativo e já tem algo na casa dos 9 mil stars no GitHub.
Repositório: https://github.com/rtk-ai/rtk
Quanto ele reduz na prática
Esse é o ponto que faz a ideia ficar interessante de verdade.
Segundo o projeto, o RTK costuma reduzir algo como 60% a 90% do output em comandos comuns, com alguns casos chegando a 95%+ quando há muito ruído, repetição ou formatação redundante.
Esse tipo de ganho aparece principalmente em cenários como:
test runners, quando a maioria dos testes passou e só poucas falhas importam
logs repetitivos, onde várias linhas iguais podem virar uma só com contagem
comandos tabulares, como
docker pslistagens extensas, como
git status,ls -laou diretórios grandessaídas com boilerplate, onde muito texto existe só para consumo humano
O ponto importante aqui é: essas porcentagens são casos típicos e exemplos reportados pelo projeto, não uma garantia universal. O ganho real depende do tipo de comando que você roda, do tamanho do projeto e de quanto ruído existe na saída.
No fim, o número mais útil é o que aparece no seu ambiente com rtk gain.
Como ele funciona
O RTK aplica algumas estratégias de compressão dependendo do tipo de comando.
1. Smart Filtering
Remove ruído: comentários, whitespace excessivo, boilerplate e partes da saída que normalmente não carregam valor real para o modelo.
2. Grouping
Agrupa itens parecidos. Em vez de listar tudo de forma linear, ele consolida arquivos por diretório, erros por categoria ou falhas por tipo.
3. Truncation
Mantém o que importa e corta redundância. Se 48 de 50 testes passaram, nem sempre faz sentido gastar contexto com 48 linhas de ok.
4. Deduplication
Linhas repetidas viram uma linha com contagem. Um log com dezenas ou centenas de mensagens idênticas pode ser reduzido para algo como:
Connection refused (×200)
Fluxo interno, em alto nível
O pipeline geral do RTK segue mais ou menos esta sequência:
Parse args → Route para o módulo certo → Executa o comando real → Filtra a saída → Imprime versão compacta → Registra métricas
A arquitetura do projeto separa filtros por categoria de comando. Há módulos específicos para coisas como Git, Docker, cargo test, pytest, grep/rg e outros, além de uma infraestrutura compartilhada de roteamento, tracking e relatórios.
Instalação
Via Homebrew
brew install rtk
Via script (Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh
Via Cargo
cargo install --git https://github.com/rtk-ai/rtk
Verificando
rtk --version
Observação importante: existe outro pacote chamado
rtknocrates.io. Se você instalar viacargo install rtk, pode acabar pegando o pacote errado. Para este projeto, o mais seguro é usarcargo install --git.
Setup com Claude Code
O jeito mais interessante de usar o RTK com Claude Code é por meio do hook automático.
rtk init --global
Esse comando configura um PreToolUse hook no arquivo:
~/.claude/settings.json
Depois disso, o Claude Code passa a reescrever chamadas de terminal compatíveis para usar o RTK de forma transparente.
A ideia é esta:
Claude pede: git status
Hook reescreve: rtk git status
RTK executa: git status
RTK filtra: remove ruído e comprime
Claude recebe: saída compacta
Na prática, o modelo recebe só o resultado já filtrado.
Limitação importante do hook
Aqui entra um detalhe que vale destacar porque muda bastante a expectativa de uso.
O hook do RTK só intercepta chamadas Bash.
Ou seja: ferramentas built-in do Claude Code, como Read, Grep e Glob, não passam por esse hook. Nessas situações, se você quiser o benefício da compressão, precisa usar equivalentes shell como:
catrgfind
Ou chamar diretamente comandos do próprio RTK, quando fizer sentido.
Antes e depois na prática
Os exemplos abaixo são ilustrativos, mas seguem o tipo de redução que o projeto promete.
Git push
Sem RTK:
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 1.2 KiB | 1.2 MiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:user/repo.git
abc1234..def5678 main -> main
Com RTK:
ok main
Testes com cargo test
Sem RTK:
running 15 tests
test utils::test_parse ... ok
test utils::test_format ... ok
test utils::test_validate ... ok
...
test edge::test_overflow ... FAILED
test edge::test_boundary ... FAILED
failures:
---- edge::test_overflow stdout ----
thread 'edge::test_overflow' panicked at 'assertion failed...'
... (stack trace)
Com RTK:
FAILED: 2/15 tests
test_overflow: assertion failed at edge.rs:42
test_boundary: panic at edge.rs:87
Docker
Sem RTK:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 postgres:15 "docker..." 2 hours ago Up 2 hours 0.0.0.0:5432->5432/tcp db
f6e5d4c3b2a1 redis:7 "docker..." 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp cache
Com RTK:
2 containers running
db: postgres:15 :5432
cache: redis:7 :6379
Listagem de diretório
Sem RTK:
drwxr-xr-x 15 user staff 480 Mar 15 10:23 .
drwxr-xr-x 5 user staff 160 Mar 10 09:00 ..
-rw-r--r-- 1 user staff 1234 Mar 15 10:23 Cargo.toml
...
Com RTK:
my-project/
+-- src/ (8 files)
| +-- main.rs
+-- Cargo.toml
+-- README.md
Arquitetura por dentro
A estrutura do projeto segue uma divisão modular. Em vez de tratar todo output da mesma forma, o RTK tem lógica especializada para categorias diferentes de comando.
Um recorte da organização interna inclui coisas como:
src/
├── main.rs
├── git.rs
├── container.rs
├── cargo_cmd.rs
├── pytest_cmd.rs
├── go_cmd.rs
├── vitest_cmd.rs
├── grep_cmd.rs
├── filter.rs
├── tracking.rs
├── gain.rs
├── discover/
├── config.rs
└── utils.rs
O main.rs faz o parse dos argumentos e roteia a execução. Depois disso, o RTK:
executa o comando real com
std::process::Commandcaptura
stdoutestderraplica filtros específicos para aquele tipo de saída
imprime a versão compacta
registra métricas de uso e savings
Outro detalhe importante: o RTK preserva os exit codes. Então, se um cargo test falhar, o comando continua falhando corretamente do ponto de vista de CI, automações e do próprio agent.
Também há fallback: se o filtro não conseguir operar do jeito esperado, a ferramenta pode repassar a saída original em vez de quebrar o fluxo.
Tracking de savings
Além de comprimir a saída, o RTK registra métricas localmente em SQLite para mostrar quanto contexto você deixou de gastar.
Exemplos de comandos:
# Resumo geral
rtk gain
# Gráfico ASCII dos últimos 30 dias
rtk gain --graph
# Histórico recente de comandos
rtk gain --history
# Breakdown por dia
rtk gain --daily
# Export JSON
rtk gain --all --format json
Também existe o rtk discover, que analisa o histórico recente e tenta identificar oportunidades onde você poderia economizar mais:
rtk discover
rtk discover --all --since 7
O que eu acho mais interessante aqui
A parte mais legal do RTK não é só “deixar output bonito”. É mudar a economia do contexto.
Em coding agents, a disputa por janela não acontece só entre arquivos do projeto. Ela acontece também entre:
logs
listagens
tabelas
stacks
resultados de teste
respostas de comandos repetitivos
Se esse lixo operacional some ou encolhe bastante, sobra mais espaço para o que interessa de verdade: código, diffs, instruções e raciocínio.
Limitações e trade-offs
Esse é o tipo de ferramenta que vale muito mais quando você entende onde ela não cobre.
1. Só funciona em chamadas de terminal compatíveis
Se o agent estiver usando ferramentas internas em vez de shell, o RTK não entra no caminho automaticamente.
2. Compressão demais pode esconder contexto útil
Esse é o trade-off natural. Em alguns casos, o output completo pode ser importante. O RTK oferece níveis de verbosidade, mas isso exige escolha explícita.
3. Projeto novo
O RTK é recente e começou a ganhar releases públicas em 2026. Já tem bastante atenção, mas ainda não é uma ferramenta com anos de histórico em produção.
4. Savings variam conforme projeto e fluxo
Os números de economia publicados pelo projeto são úteis como referência, mas o ganho real depende do seu stack, do tipo de comando que você roda e do quanto seu workflow é verboso.
Quando faz sentido usar
O RTK parece fazer mais sentido se você:
usa coding agents no terminal com frequência
trabalha em projetos médios ou grandes
roda comandos com saída muito verbosa
se importa com custo e com janela de contexto
quer deixar mais espaço livre para código e instruções
Quando talvez não faça tanta diferença
Pode não valer tanto a pena se você:
usa pouco terminal no fluxo com agents
trabalha em projetos pequenos
já tem outputs naturalmente enxutos
prefere ver sempre a saída completa sem nenhum filtro no meio
Conclusão
O RTK é uma ideia simples, mas bem alinhada com um problema real do uso de coding agents: output demais também consome inteligência.
A proposta não é substituir o terminal nem inventar um novo workflow. É só reduzir o desperdício de contexto gerado por comandos que já são naturalmente verbosos.
E o ponto mais convincente aqui é justamente o impacto prático: em vez de pequenas otimizações marginais, o RTK fala em reduções típicas de 60% a 90%, com alguns cenários indo além disso. Para quem usa agent o dia inteiro, isso deixa de ser detalhe e vira parte do workflow.
Se você usa Claude Code, Codex ou fluxos parecidos no terminal, esse tipo de proxy pode fazer bastante sentido — principalmente em projetos onde testes, logs, Git e Docker já ocupam uma parte grande da conversa com o modelo.
No mínimo, vale testar por alguns dias e olhar o que o rtk gain mostra no seu caso.
Referências
Repositório do projeto:
https://github.com/rtk-ai/rtkDocumentação de arquitetura:
https://github.com/rtk-ai/rtk/blob/master/ARCHITECTURE.mdTroubleshooting:
https://github.com/rtk-ai/rtk/blob/master/docs/TROUBLESHOOTING.md


