Modelo de razonamiento
Se ocupa de la conversación principal, del razonamiento difícil y de los cambios de código.
/model o /tiers reasoning
Código abierto · Apache-2.0
Distill es un harness de agente de código ligero, con interfaz de terminal. Funciona con las suscripciones de Grok y Codex que ya pagas, con OpenRouter o con cualquier modelo que hable el protocolo compatible con la API de OpenAI. Reduce lo que tus herramientas devuelven antes de que ese texto llegue al modelo.
curl -fsSL https://raw.githubusercontent.com/samuelfaj/distill/main/install.sh | sh
macOS, Linux y Windows. Después, actualiza con distill update.
Niveles de modelo
Cada nivel tiene su propio selector. Todos empiezan en auto.
Se ocupa de la conversación principal, del razonamiento difícil y de los cambios de código.
/model o /tiers reasoning
Asume llamadas adecuadas dentro de la misma conversación cuando un modelo más ligero puede con ellas. Opcional.
/worker-model o /tiers worker
Se ocupa de tareas acotadas, como extracción, resúmenes y compresión.
/utility-model o /tiers utility
Deja un nivel sin definir para funcionar sin él. Un Worker sin definir significa que no hay enrutado al Worker.
Enrutado
Jev es la capa de decisión dentro de Distill. Responde preguntas estructuradas sobre un estado pequeño que arma el harness: qué modelo debe asumir una llamada, cuánta capacidad necesita esa llamada y qué partes del resultado de una herramienta vale la pena conservar.
Ahorro de tokens
La mayor parte de la reducción ocurre en código determinista, sobre el resultado de una herramienta, antes de que entre en la conversación. El resultado pasa por estas etapas en orden, y cada etapa tiene una barrera que puede detenerla.
| Etapa | Qué elimina | Cuándo se ejecuta | Por defecto |
|---|---|---|---|
| Reutilización de lectura | Una segunda copia de bytes que ya están en la conversación | 2000 bytes o más, e idéntico por hash a un payload ya enviado | Activada |
| Barrera de salida exacta | Nada. Esta etapa detiene a las demás. | La llamada está direccionada por línea, o el texto pertenece a una skill | Siempre |
| Limpieza previa | Ruido de terminal y contenido que el propio payload repite | 2000 bytes o más, y no es un documento | Activada |
| Extracción de importancia | La parte ilegible del medio de un payload largo | 4000 bytes o más, y no es un documento | Activada |
| Tarea utilitaria | Un payload que un modelo pequeño digiere más barato de lo que debería hacerlo el modelo de la sesión | 2000 bytes o más, y hay una tarea registrada para ese formato | Activada |
| Compresión utilitaria | Lo mismo, para un payload demasiado grande para quererlo entero | 24 KiB o más | Activada |
Las cuatro primeras etapas ahorran tokens. Las dos últimas ahorran dinero, pasando el trabajo a un modelo más barato, que es otra cosa.
Barreras
Toda etapa que descartaría bytes escribe antes el original en un archivo y envía su ruta junto con el texto reducido. Si el almacén se niega, la etapa no se ejecuta.
La reducción se compara con el original antes de que alguien la use. Si un camino, un file:line, un número o una palabra de error desaparecería, la reducción se descarta y los bytes originales se conservan.
retrieve_range devuelve un rango de líneas de un payload guardado. grep_handle hace una búsqueda exacta dentro de él y devuelve las líneas tal cual, con sus números de línea.
Distill solo usa la respuesta de una tarea utilitaria cuando una barrera puede comprobarla. Una extracción debe citar fragmentos que aparecen de verdad en el payload, una clasificación debe caer en una etiqueta cerrada y una elección debe nombrar ids que se ofrecieron. Cuando la comprobación falla, los bytes se quedan como estaban.
Reglas
Son reglas del código, no ajustes.
Un límite no es un ahorro, una estimación no es una medición, y un payload omitido no es una victoria.
El harness
Distill es un agente de código completo. El token saver es una parte.
Entra en Grok, ChatGPT y OpenRouter de forma independiente. Salir de uno no afecta a los demás.
Levanta un servidor compatible con la API de OpenAI, añade una entrada en config.toml y úsalo como cualquier nivel.
Abre Model tiers en la pantalla de inicio para cambiar un nivel, o escribe /tiers con su nombre.
/context muestra hacia dónde va la ventana, incluido lo que cuestan las definiciones de herramientas y la lista de skills. /compact recupera espacio al momento.
GROK_LOG_JEV=1 registra la palanca, el veredicto, el motivo y la confianza de cada decisión.
Define [jev] enabled = false, o arranca con GROK_JEV=0, para apagar toda la capa. Cada palanca tiene además su propia clave.
Los perfiles nuevos viven en ~/.distill. Apunta DISTILL_HOME a otro sitio, y un perfil ~/.grok existente sigue funcionando.
distill update actualiza una instalación hecha con el instalador de releases.
Nuevo worktree, retomar sesión, niveles de modelo y un logout aparte por proveedor, todo en una pantalla.
Inicio rápido
El instalador detecta tu plataforma y tu arquitectura, y escribe el binario dentro de tu directorio de usuario.
Ejecuta el comando de tu plataforma.
Inicia sesión en la suscripción que ya pagas, o en OpenRouter. Puedes usar más de una.
Elige un modelo de razonamiento, uno de trabajo y uno utilitario, o déjalos en auto.
Arranca distill en cualquier directorio de proyecto.
macOS y 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
Actualizar una instalación existente
distill update
Dudas
Cualquiera de ellas. Distill mantiene el login y el logout por separado para Grok, ChatGPT y OpenRouter, y salir de uno no cierra los demás. ChatGPT usa OAuth, y OpenRouter acepta un login por navegador o una OPENROUTER_API_KEY.
Sí. Levanta un servidor compatible con la API de OpenAI, añade una entrada en config.toml con el id del modelo y la base URL, y selecciónalo como nivel. Los perfiles nuevos usan ~/.distill, y puedes mover esa ubicación con DISTILL_HOME.
No. Jev elige entre modelos y rutas candidatas que le entrega el código. El modo de planificación, la aprobación automática, el YOLO y las políticas de permisos son de Distill, y Jev no aprueba, no veta ni retiene una llamada para confirmación.
El harness vuelve a su camino normal. Una decisión de enrutado que falla, agota el tiempo o llega sin confianza deja el modelo de la sesión en su sitio, y una respuesta utilitaria que no pasa su barrera se descarta, así que los bytes originales se quedan como estaban.
Arranca Distill con GROK_LOG_JEV=1. Escribe logs/jev.jsonl dentro de tu perfil, una entrada por decisión, con etiquetas como reuse, crush, extract, keep, used, defer, local y cloud.
Distill no publica una cifra de ahorro, y el código no mide ninguna. Las etapas y sus umbrales están documentados, así que puedes leer lo que se ejecuta y revisar el registro de decisiones de tus propias sesiones.
Distill funciona en macOS, Linux y Windows, y se actualiza en el sitio.
curl -fsSL https://raw.githubusercontent.com/samuelfaj/distill/main/install.sh | sh
Código abierto bajo la licencia Apache-2.0.