Skip to main content

Command Palette

Search for a command to run...

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

Published
10 min read
Como RTK Comprime a Saída dos Seus Comandos pra Coding Agents Gastarem Menos

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 ps

  • listagens extensas, como git status, ls -la ou diretórios grandes

  • saí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 rtk no crates.io. Se você instalar via cargo install rtk, pode acabar pegando o pacote errado. Para este projeto, o mais seguro é usar cargo 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:

  • cat

  • rg

  • find

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:

  1. executa o comando real com std::process::Command

  2. captura stdout e stderr

  3. aplica filtros específicos para aquele tipo de saída

  4. imprime a versão compacta

  5. 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/rtk

  • Documentação de arquitetura: https://github.com/rtk-ai/rtk/blob/master/ARCHITECTURE.md

  • Troubleshooting: https://github.com/rtk-ai/rtk/blob/master/docs/TROUBLESHOOTING.md