Releases: bb1nfosec/skim
Release list
skim v0.5.1 — Enterprise Hardening + Honest Messaging
Enterprise hardening
- Login rate limiting — per-IP sliding window, brute-force protection (SKIM_LOGIN_MAX_ATTEMPTS / SKIM_LOGIN_WINDOW_SEC)
- last_login tracking; login audit records origin IP
- Data retention —
skim admin purge --older-than NandPOST /api/v1/admin/purgefor compliance
Honest Claude Code messaging
Confirmed via Claude Code docs: a Pro/Max subscription (OAuth) ignores ANTHROPIC_BASE_URL and routes straight to Anthropic — the proxy cannot intercept subscription traffic. README, docs, the proxy banner, and the demo now state plainly that Claude Code requires API-key auth to use the proxy. Cursor / SDK / OpenAI-compatible tools are unaffected.
Demo
Rewrote the landing page with the subscription caveat surfaced inline. No fake trial/SCIM claims.
pip install -U skim-llm
skim v0.5.0 — Enterprise Control Plane
Self-contained proxy dashboard + full enterprise control plane.
- 🛡️ Budget enforcement (hard 429 block)
- 🔔 Webhook alerts (Slack/Teams + signed HTTP)
- ✉️ User invites (single-use self-registration)
- 🔑 Scoped + expiring API keys
- 👥 RBAC (admin/team_admin/user)
- 📋 Immutable audit log
- 📤 CSV/JSON data export
- ⌨️
skim adminCLI
pip install skim-llm · Docs: https://github.com/bb1nfosec/skim/tree/main/docs
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