v0.1.0 — First release
What is distill?
Token costs are quadratic, not linear. Every LLM re-reads your entire conversation on every turn. Distill scans repos, finds the waste, and eliminates it — with adapters that plug into Claude, OpenAI, Gemini, and Ollama.
What is in this release
Dollar cost output
- Every scan now shows per-session $ spend and sessions-per-dollar
- Per-file cost column with
--cost; covers all four provider families
distill unified CLI
distill scan --path . --model claude
distill analyze --path .
distill check --path . --max-pct 30
distill generate --output . --model all
CI budget gate
- name: Token budget check
run: distill check --path . --max-pct 30Exits 1 if over budget. --fail-on-waste also catches lock files and generated code. --json for machine-readable output.
Google Gemini adapter
GeminiAdapter— Gemini 2.0 Flash, 1.5 Pro, 1.5 Flash- 1M token context window
- Native token counting via
model.count_tokens() - Same interface as Claude/OpenAI/Ollama:
llm.chat(),llm.compact(),llm.print_stats()
Applied distill to itself
.llmignore, CLAUDE.md, .claudeignore generated and committed. CI now runs a token budget check on every push.
Install
git clone https://github.com/bb1nfosec/Distill
cd Distill
pip install -e ".[tiktoken]"
distill scan --path .Benchmarks
- 0.00% token estimation error (tiktoken path)
- 1.8M tokens/sec scan throughput
- 42.9% input reduction with compaction over a 10-turn session
- 561k tokens eliminated from a real Next.js project with one generated
.llmignore
Full results: benchmarks/results.md