You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Logo-faithful terminal motifs in the shared UI. The ui design system speaks the
logo's "trim the wool, same sheep" story in one voice: a wordmark banner
(‹‹ llmtrim ››), the shear before→after metaphor on the savings axes
(108.8M ─✂─▶ 34.8M), a hero accent style, and a sparkline. monitor's hero carries
the ✓ same answers, smaller bill promise, and monitor --daily/--weekly/--monthly and update lead with the wordmark.
Redesigned status dashboard. A single dominant hero figure in a clean box — the
real, cache-discounted dollars that came off the bill — with the promise
(✓ same answers, smaller bill) beneath it, the input savings drawn with the shear metaphor
(108.8M ─✂─▶ 34.8M), and a new 7-DAY TREND sparkline of daily tokens saved. The header
collapses to one calm strip (‹‹ llmtrim ›› ● running · … ✓ healthy) when healthy, expanding
to per-link warnings only when degraded. The savings bars fill with the accent (the win grows
the solid block), and the BY MODEL table is sorted by $ saved with a light header rule.
The added-latency footer and every honesty caveat are preserved.
Changed
The LLMTRIM_CAPTURE_DIR corpus is now size-capped. Capture wrote one JSON per
request with no ceiling, so a long-lived daemon could fill the disk (which then starves
the daemon's own pidfile and ledger writes). It now evicts the oldest *.json captures
once they exceed LLMTRIM_CAPTURE_MAX_MB (default 1024; set 0 to disable). The sweep
counts only top-level capture files (any other files you keep in the dir are left alone)
and runs on a background thread, so it never blocks request handling.
Fixed
status --watch no longer drifts on terminals narrower than its longest line. The
in-place repaint assumed one logical line per screen row, so a soft-wrapped line (e.g. a
daemon warning) left stale rows. Lines are now truncated to the terminal width (ANSI-aware)
before the repaint; the full text still prints in the one-shot status.
llmtrim update now prints the correct npm upgrade command. It printed npm update -g @llmtrim/cli, which npm treats as a no-op for a globally installed package
already on a satisfying version; it now prints npm install -g @llmtrim/cli@latest.
llmtrim update on a Homebrew install now prints a command that works. The Homebrew
arm told you to run brew upgrade llmtrim, but the formula is tapped as fkiene/tap/llmtrim. On a machine that never added the tap, that errors with "no
available formula named llmtrim" and you stay on the old binary. It now prints the
tap-qualified, idempotent form (brew tap fkiene/tap then brew upgrade fkiene/tap/llmtrim).
status no longer reports "stopped" while the proxy is serving. Health was decided
from the pidfile alone, so a daemon whose pidfile went missing (e.g. lost to a full disk)
showed the loud "stopped — LLM calls will fail" banner even though the proxy was still
live on the wired port. status now probes that port directly: a proxy answering with no
pidfile reads as running-but-degraded (llmtrim can't confirm it owns the listener, so it
flags "no pidfile … re-run llmtrim setup") instead of the false "stopped". The
supervised daemon also re-records its own pidfile on restart, so a transient loss
self-heals.
llmtrim autostart no longer hardcodes the default port. Run with no --port, the
command wrote the default port into the login entry regardless of the port your daemon
and HTTPS_PROXY were actually on, so a reboot could bring the interceptor up on a port
the environment wasn't wired to (LLM calls then fail until re-fixed). It now resolves the
port the same way setup/start do — explicit --port, else the running daemon, else
the configured env — and only falls back to the default when nothing is pinned.
uninstall's closing message now names the leftover env vars and gives a remedy that
works. It said only "open a new shell", which never told you what was left behind and
read as optional. It now spells out that the current shell still has HTTPS_PROXY, HTTP_PROXY, and NODE_EXTRA_CA_CERTS exported (the exact set setup writes) and that
clearing them means a new shell or unset HTTPS_PROXY HTTP_PROXY NODE_EXTRA_CA_CERTS —
not re-sourcing the profile, which leaves an already-exported var set.