Skip to content

v0.1.0 — First release

Choose a tag to compare

@bb1nfosec bb1nfosec released this 21 May 21:26
· 41 commits to main since this 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 30

Exits 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