Distill is a lightweight coding agent harness and TUI, built to get far more done with far fewer tokens.
It works with Grok, Claude and Codex subscriptions, and with any model that speaks the OpenAI-compatible protocol.
Steps:
- Download distill.
- Login with openrouter.
- Login with your subscription.
- Save money.
Each session runs in one execution mode. Auto is the default. Switch with a slash command in the TUI, or pass a flag to headless prompts.
|
UltraSave cost 0.069x the credits of Normal on our 20-case benchmark, and all 20 tasks still passed. It works directly: narrow searches, small reads, short reports. Required checks still run before a task counts as done.
|
UltraFast finished in 0.509x the wall time of Normal, about half, and all 20 tasks still passed. It skips planning and delegation rounds and goes straight to the work. Your model, effort and verification steps stay the same.
|
UltraCode lets the session split work into smaller tasks and hand them to subagents, then checks their changes and evidence before accepting the result. Delegation is optional and has no speed or cost claim yet. Your model, effort and permissions stay the same.
|
Auto used 57% less total time and 77% fewer estimated LLM credits than Normal; both passed 20/20 tasks in our paired benchmark. It switches modes as work changes. Subagents inherit Auto and adapt independently.
|
Details: UltraSave, UltraFast and UltraCode.
See BENCHMARKS.md for the full results tables, definitions, methodology, cost bounds, reproduction commands, and source JSON.
curl -fsSL https://raw.githubusercontent.com/samuelfaj/distill/main/install.sh | sh
export PATH="$HOME/.local/share/distill/bin:$PATH"
distill --versionirm https://raw.githubusercontent.com/samuelfaj/distill/main/install.ps1 | iex
$bin = "$env:LOCALAPPDATA\distill\bin"; [Environment]::SetEnvironmentVariable('Path', "$bin;" + [Environment]::GetEnvironmentVariable('Path', 'User'), 'User')
distill --versionFor an installation made with the release installer:
distill updateOpen Model tiers on the home screen, click change beside the current
model, or enter /tiers. You can edit each tier in that screen.
| Tier | Purpose | Picker |
|---|---|---|
| Main model | Required. Owns every session: it plans, specifies, delegates, and reviews the work. | /model or /tiers main |
| Worker model | Optional. Runs every delegated assignment the main model hands it as a precise spec. Without it, the main model does all the work. | /worker-model or /tiers worker |
| Utility model | Handles bounded tasks such as extraction, summaries, and compression. | /utility-model or /tiers utility |
Pick your strongest model as the main model and a cheaper one as the worker:
the main model gives the worker as much of the work as it can do well. Each
tier takes an effort level or auto, which lets Jev pick the effort for every
call; auto is the default. In the Model tiers screen, enter a tier as
model effort (for example gpt-6-luna auto). You can supply each selection
directly:
/model gpt-6-sol auto
/worker-model gpt-6-luna auto
/utility-model openrouter-qwen37 auto
Two rule sets are built into every system prompt, for the main model and for its subagents, and neither has an off switch:
- Caveman: the agent writes terse prose and keeps code, paths and error
strings exact.
/caveman lite|full|ultrachanges how hard it compresses (defaultfull); a storedoffis ignored. - Ponytail: the agent works like a lazy senior developer. Before writing code it asks whether the code needs to exist, then reuses what the codebase has, then the standard library, then an installed dependency, and only then writes the minimum that works. Validation, error handling, security and anything you asked for are never cut. Adapted from ponytail (MIT).

