Código aberto · Apache-2.0

Muito mais trabalho feito
com muito menos tokens.

O Distill é um harness de agente de código leve, com interface de terminal. Ele roda nas assinaturas do Grok e do Codex que você já paga, no OpenRouter ou em qualquer modelo que fale o protocolo compatível com a API da OpenAI. Ele reduz o que as suas ferramentas devolvem antes de esse texto chegar ao modelo.

curl -fsSL https://raw.githubusercontent.com/samuelfaj/distill/main/install.sh | sh

macOS, Linux e Windows. Depois, atualize com distill update.

A interface de terminal do Distill, com o menu inicial, a entrada Model tiers e a linha de status com os modelos de raciocínio e de trabalho ativos
Funciona com
  • Assinatura do Grok
  • Assinatura do Codex
  • OpenRouter
  • Modelos locais

Camadas de modelo

Modelos de raciocínio, de trabalho e utilitário

Cada camada tem o seu próprio seletor. Todas começam em auto.

Modelo de raciocínio

Cuida da conversa principal, do raciocínio difícil e das mudanças de código.

/model ou /tiers reasoning

Modelo de trabalho

Assume chamadas adequadas dentro da mesma conversa quando um modelo mais leve dá conta. Opcional.

/worker-model ou /tiers worker

Modelo utilitário

Cuida de tarefas delimitadas, como extração, resumos e compressão.

/utility-model ou /tiers utility

Deixe uma camada sem definir para rodar sem ela. Um Worker sem definir significa nenhum roteamento para o Worker.

Roteamento

O Jev escolhe o modelo de cada chamada

O Jev é a camada de decisão dentro do Distill. Ele responde perguntas estruturadas sobre um estado pequeno que o harness monta: qual modelo deve assumir uma chamada, quanta capacidade essa chamada exige e quais partes do resultado de uma ferramenta vale a pena manter.

O que o Jev decide

  • Qual modelo e qual nível de esforço uma chamada usa, quando o esforço está em auto.
  • Quais arquivos, linhas, logs, resultados de busca e instruções merecem uma segunda olhada.
  • Quais erros tratar primeiro quando uma verificação falha.
  • O que preservar durante a compressão e a compactação.

Economia de tokens

De onde vem a economia

A maior parte da redução acontece em código determinístico, sobre o resultado de uma ferramenta, antes de ele entrar na conversa. O resultado passa por estas etapas em ordem, e cada etapa tem uma trava que pode interrompê-la.

Etapa O que ela remove Quando roda Padrão
Reuso de leitura Uma segunda cópia de bytes que já estão na conversa 2000 bytes ou mais, e idêntico por hash a um payload já enviado Ativo
Trava de saída exata Nada. Esta etapa interrompe as demais. A chamada é endereçada por linha, ou o texto pertence a uma skill Sempre
Limpeza prévia Ruído de terminal e conteúdo que o próprio payload repete 2000 bytes ou mais, e não é um documento Ativo
Extração de importância O meio ilegível de um payload longo 4000 bytes ou mais, e não é um documento Ativo
Tarefa utilitária Um payload que um modelo pequeno digere mais barato do que o modelo da sessão deveria 2000 bytes ou mais, e existe uma tarefa registrada para esse formato Ativo
Compressão utilitária O mesmo, para um payload grande demais para se querer inteiro 24 KiB ou mais Ativo

As quatro primeiras etapas economizam tokens. As duas últimas economizam dinheiro, passando o trabalho para um modelo mais barato, o que é outra coisa.

Travas

O original fica sempre guardado

Toda etapa que descartaria bytes grava o original em um arquivo antes e envia o caminho junto com o texto reduzido. Se o armazenamento recusa, a etapa não roda.

A trava de literais

A redução é comparada com o original antes de alguém usá-la. Se um caminho, um file:line, um número ou uma palavra de erro desapareceria, a redução é descartada e os bytes originais ficam.

Ler o original de volta

retrieve_range devolve um intervalo de linhas de um payload guardado. grep_handle faz uma busca exata dentro dele e devolve as linhas na íntegra, com os números de linha.

Respostas conferidas de modelos pequenos

O Distill só usa a resposta de uma tarefa utilitária quando uma trava consegue conferi-la. Uma extração precisa citar trechos que realmente aparecem no payload, uma classificação precisa cair em um rótulo fechado e uma escolha precisa nomear ids que foram oferecidos. Quando a conferência falha, os bytes ficam como estavam.

Regras

O que nunca acontece

Estas são regras no código, não configurações.

  • O resultado de uma chamada de saída exata nunca é reescrito.
  • Um documento nunca é reescrito.
  • Uma mensagem escrita por você nunca é comprimida nem reescrita. O pipeline só recebe resultado de ferramenta.
  • O corpo de uma skill e o texto de permissão nunca são reescritos.
  • O valor de um segredo nunca é devolvido por uma transformação. Um marcador de presença o mascara.
  • Um payload nunca é alterado sem o aval da trava de literais, e uma etapa com perda nunca roda sem o original guardado.
  • Nenhum número de economia é divulgado, porque nada no Distill mede um.

Um limite não é uma economia, uma estimativa não é uma medição, e um payload ignorado não é uma vitória.

O harness

O que mais vem junto

O Distill é um agente de código completo. O token saver é uma parte dele.

Logins separados por provedor

Entre no Grok, no ChatGPT e no OpenRouter de forma independente. Sair de um não afeta os outros.

Modelos locais

Suba um servidor compatível com a API da OpenAI, adicione uma entrada no config.toml e use como qualquer camada.

Seletores de camada

Abra Model tiers na tela inicial para trocar uma camada, ou digite /tiers com o nome dela.

Comandos de contexto

/context mostra para onde a janela está indo, incluindo o custo das definições de ferramentas e da lista de skills. /compact recupera espaço na hora.

Registro de decisões

GROK_LOG_JEV=1 registra a alavanca, o veredito, o motivo e a confiança de cada decisão.

Desligar com uma chave

Defina [jev] enabled = false, ou inicie com GROK_JEV=0, para desligar a camada inteira. Cada alavanca também tem a sua própria chave.

Perfis

Perfis novos ficam em ~/.distill. Aponte DISTILL_HOME para outro lugar, e um perfil ~/.grok existente continua funcionando.

Atualização no lugar

distill update atualiza uma instalação feita com o instalador de releases.

O menu inicial

Nova worktree, retomar sessão, camadas de modelo e logout separado por provedor, tudo na mesma tela.

Início rápido

Quatro passos

O instalador detecta a sua plataforma e arquitetura, e grava o binário dentro do seu diretório de usuário.

  1. Instale

    Rode o comando da sua plataforma.

  2. Entre

    Faça login na assinatura que você já paga, ou no OpenRouter. Dá para usar mais de uma.

  3. Defina as camadas

    Escolha um modelo de raciocínio, um de trabalho e um utilitário, ou deixe tudo em auto.

  4. Rode

    Inicie o distill em qualquer diretório de projeto.

macOS e Linux

curl -fsSL https://raw.githubusercontent.com/samuelfaj/distill/main/install.sh | sh

Windows

irm https://raw.githubusercontent.com/samuelfaj/distill/main/install.ps1 | iex

Atualizar uma instalação existente

distill update

Dúvidas

Perguntas e respostas

Quais contas eu preciso?

Qualquer uma delas. O Distill mantém login e logout separados para Grok, ChatGPT e OpenRouter, e sair de um não sai dos outros. O ChatGPT usa OAuth, e o OpenRouter aceita login pelo navegador ou uma OPENROUTER_API_KEY.

Posso usar um modelo local?

Sim. Suba um servidor compatível com a API da OpenAI, adicione uma entrada no config.toml com o id do modelo e a base URL, e selecione como uma camada. Perfis novos usam ~/.distill, e você pode mudar esse local com DISTILL_HOME.

O Jev decide o que o meu agente pode fazer?

Não. O Jev escolhe entre modelos e rotas candidatas que o código fornece. Modo de planejamento, aprovação automática, YOLO e políticas de permissão são do Distill, e o Jev não aprova, não veta nem segura uma chamada para confirmação.

E quando uma decisão erra?

O harness volta ao caminho normal. Uma decisão de roteamento que falha, estoura o tempo ou vem sem confiança deixa o modelo da sessão no lugar, e uma resposta utilitária que não passa na trava é descartada, então os bytes originais ficam como estavam.

Como eu vejo o que ele fez?

Inicie o Distill com GROK_LOG_JEV=1. Ele grava logs/jev.jsonl dentro do seu perfil, um registro por decisão, com rótulos como reuse, crush, extract, keep, used, defer, local e cloud.

Quanto isso economiza de verdade?

O Distill não publica um número de economia, e o código não mede um. As etapas e os limites estão documentados, então você pode ler o que roda e conferir o registro de decisões das suas próprias sessões.

Instale com um comando

O Distill roda em macOS, Linux e Windows, e se atualiza no lugar.

curl -fsSL https://raw.githubusercontent.com/samuelfaj/distill/main/install.sh | sh

Código aberto sob a licença Apache-2.0.