Repository navigation
context-guru v0.5.2
This release adds commands that price changes on your own history before you make them: /context-guru:save-more and /context-guru:remove-mcp-and-skills. It also redesigns the dashboard, makes the savings figures more conservative, and fixes the status line after a plugin update.
Items marked [Notice] change something you will see, or need an action from you.
New and changed
/context-guru:save-more: which config and keep-alive strategy would have cost least on your history (#526, #528, #538, #530)
- [Notice] It replaces
/context-guru:adapt.adaptstays for one release and points to the new command. save-more configreplays your past sessions under every shipped preset and shows what each one would have saved.--customalso tries single components, their combinations and their order.save-more cachereplays every keep-alive strategy on your history, with a day-of-week × hour view of where the saving comes from.save-morewith no argument runs both and asks one question at the end. Nothing changes until you say yes, andrevertundoes the last change.- Presets that use a model (extract_llm, the summarizers) cannot be replayed. Their figures are marked as estimates, with a range.
- The command checks itself: it replays your current config and compares the result with what was really booked. If the two differ by more than 15%, it says so.
/context-guru:remove-mcp-and-skills: MCP servers, tools and skills you never use (#526, #523, #531, #537)
- It lists the MCP servers, MCP tools and skills you declared and never called, with what carrying them cost. It never lists built-in tools or context-guru's own.
- It asks one question: "Remove these N items, saving ≈$X/week?" It also says how long the one-off cache rewrite takes to pay back.
- It shows what earlier removals have already saved, measured from your requests.
- [Notice] The Inventory tab now prices each request on the tools it really carried. Before, it priced a tool on every request of every session that declared it, which counted too much.
/context-guru:insights now covers savings, cache and tools (#544)
- [Notice]
/context-guru:savings,/context-guru:cacheand/context-guru:wastebecame/context-guru:insights savings,insights cacheandinsights tools. With no argument, it shows all three.
The dashboard is redesigned (#564)
- [Notice] The Overview page shows only the three savings: cache keep-alive, compaction, and the tools and skills filter. Each one shows dollars and tokens against what you spent.
- Every tab starts with one line that says what it shows. Technical terms have a tooltip.
- [Notice] The Benchmarks tab is removed. The
--dashboard-bench-dirsflag is still accepted, but does nothing. - The five-page home page is retired. Old links land on the matching tab.
The status line gives no more advice. It shows an optional weekly tip (#539)
- [Notice] The hints are removed: the cold-cache price, the model-switch warning, the pause warning, the context-full line and the miss-cause line. The context bar keeps its "rewrite near" mark.
- In the
balancedanddetailedlayouts, a last line names a command that you have not run for a week, for example/context-guru:save-more.
Predictive keep-alive campaigns (opt-in) (#536, #522)
- The automatic builder now reads each tenant's own history, even when other tenants fill the dashboard's row limit. Before, a busy fleet could push a tenant's own rows out of its build.
- A new command,
/context-guru:cache-campaign, builds, shows and switches campaigns. Build and switch always ask for permission. Show runs without asking. - Off by default, as in v0.5.1.
Fixed
- [Notice] After a plugin update, the status line kept running the old version (#551, #553). The plugin wrote a fixed path to one version's script, and nothing moved it. Now each session start moves the status line to the running version's script. It does this only when the status line is the plugin's own, so a status line you wrote is never touched.
- [Notice] In a long session, the status line lost its money line (#570, #575). With many threads,
/api/cachestatewas slower than the status line waits, and it showed onlysaved $x. The endpoint now answers in 45 ms at 300 threads, down from 1.6 s. A slow answer is refreshed in the background, so the line stays. - [Notice] Insights showed some savings with the wrong sign (#582, #583). Keep-alive, cache-split and declaration-filter savings appeared as losses, and the rows did not add up to the "Saved" headline. Example over 7 days: keep-alive showed −$185, the right figure was +$61. The rows now add up to the headline. Insights no longer shows what Claude Code removed by itself.
- [Notice] The dashboard credited summarize too much (#546, #573).
- The cause: a summary's credit had no end, and its first removal was priced at the cache-write rate.
- The fix: the credit now stops where the client would have compacted anyway, and the first removal is priced as a cache read.
- What you see: on measured sessions, the old figure was 3 to 7 times the real saving. The new one is lower than the real saving, by design.
- Scope: this applies to both
summarizeandcache_aware_summarizer(the medium, high and xhigh presets). extract_llm and the offloaders get the same end to their credit.
- The dashboard named the wrong cause for a cache miss after a keep-alive ping (#546). A miss after a ping that read the cache now says
prefix_change, notttl_expiry. - Compaction missed tool outputs that end with a Claude Code reminder (#556, #558). Some Claude Code versions add a
<system-reminder>block at the end of a tool output. format, toon and dedup then skipped that output, and cmdfilter and extract could drop the reminder. The proxy now keeps the reminder separate. - Context windows were inexact when the LiteLLM map was not loaded (#515, #552). Without network access, or before the map's download finished, the summarizer's trigger at a fraction of the window did not fire. A built-in list now gives exact windows for 12 current Claude models, including Sonnet, Opus and Haiku 5.5 and Fable 5.1.
- The proxy counted tokens for requests it forwards unchanged (#542). A bypassed request, such as Claude Code's compaction request, is now counted in the background, off the request path.
- The dashboard missed the last minute of an all-day keep-alive window (#540). A window picked as 00:00–23:59 now ends at 24:00.
- The dashboard's lifecycle-signal work is faster (#500). Each request body is normalized once, not twice: about 43% less time in the background writer.
How to upgrade
- Run
/context-guru:update. It restarts the proxy on v0.5.2. - Update the plugin, then start a new session. [Notice] The status line moves to the new version by itself (#553). If you upgraded to v0.5.1 and ran the workaround then, you have nothing more to do.
Known limits
- In a session with many threads, if the proxy stalls, up to 12 background status-line refreshes can run at once.
- After a keep-alive ping that missed and wrote the cache again, the dashboard can still give the next miss the cause
ttl_expiry(#580). This is rare at the default 270 s idle setting. - Summarize credit over two adjacent time windows does not add up to the credit over both (#581).
- Insights still shows a "self-removed-credit" finding for MCP servers you stopped declaring (#584).
- On a slow gateway, a keep-alive ping for a large prompt can time out after 60 s (#532).
- Claude Code's auto-mode classifier, and a tool output that quotes the compaction prompt, can be taken for a compaction (#533).
Changelog
- 8592dfa: Merge pull request #543 from rossoctl/feat/plugin-bump-051 (@amiddavid)
- 3b55da3: chore(modelinfo): refresh the bundled LiteLLM price snapshot (#554) (@amiddavid)
- c3ab6cb: chore(plugin): bump the Claude Code plugin to 0.5.1 and the Codex plugin to 0.2.1 (@amiddavid)
- 1151c36: chore(plugin): bump the plugins for v0.5.2 (Claude Code 0.5.2, Codex 0.2.2) (#589) (@amiddavid)
- 42540d9: docs(readme): replace the plugin section with "What's cool" (#579) (@amiddavid)
- b03846e: feat(cache): /context-guru:adapt cache: replay keep-alive strategies on your history and enforce through the auto builder (#530) (@OsherElhadad)
- 3aed93f: feat(cache): predictive keep-alive campaigns (re-land of #521 onto main) (#536) (@OsherElhadad)
- 9b4ab5d: feat(dash): one redesigned dashboard: Overview rewrite, plain-words tabs, Benchmarks tab removed (#564) (@OsherElhadad)
- 5d1becd: feat(dash): record lifecycle signals by default and normalize the body once (#500) (@OsherElhadad)
- 45e1d16: feat(dash): remove-mcp-and-skills backend: one question, measured savings since removal (#537) (@OsherElhadad)
- 15fdf60: feat(modelinfo): exact windows for current Claude models when the LiteLLM map is not loaded (#552) (@amiddavid)
- 5f159c9: feat(plugin): /context-guru:cache-campaign builds, shows and switches keep-alive campaigns (#522) (@OsherElhadad)
- 3051da9: feat(plugin): /context-guru:insights groups savings, cache and tools (#544) (@OsherElhadad)
- ed6bd6a: feat(plugin): /context-guru:save-more and /context-guru:remove-mcp-and-skills (replace adapt) (#526) (@OsherElhadad)
- af8ca51: feat(plugin): status line drops its hints for an optional weekly tip (#539) (@OsherElhadad)
- a8f6484: feat: /api/adapt/tools, never-used MCP servers, tools and skills priced per carrying request (#523) (@OsherElhadad)
- 4ada00e: feat: adapt compaction report and apply (hosted and local) (#528) (@OsherElhadad)
- c82ae31: feat: save-more config — every shipped preset, priced and checked against history (#538) (@OsherElhadad)
- f0c8b0c: fix(apply): Split Claude Code's trailing reminders off tool outputs (#558) (@boazdavid)
- 738eac9: fix(dash): cap extract_llm and offloader replay credit at the counterfactual client compaction (#550) (#573) (@OsherElhadad)
- 9bb3aef: fix(dash): cap summarize credit at its span and price the first removal as a read (#546) (@amiddavid)
- fbc808f: fix(dash): price the Inventory tab on the requests that carried each declaration (#531) (@OsherElhadad)
- 491486b: fix(plugin): insights shows savings with the right sign (#583) (@amiddavid)
- 1265f57: fix(plugin): re-point the status line to the running plugin after an update (#553) (@amiddavid)
- 3c55fe2: fix(statusline): keep the money line when /api/cachestate is slow (#575) (@amiddavid)
- 43ba3b6: perf(proxy): do not tokenize a bypassed request on the request path (#542) (@OsherElhadad)
- 67c5f75: test(plugin): route tests scan their own port window, below the ephemeral range (#547) (@OsherElhadad)
- f36ca01: test(plugin): stop every process the suite starts; 1 s health wait for proxies that never answer (#548) (@OsherElhadad)
- 6f563f0: test(plugin): the fake proxy writes argv and PRESET in one write (#561) (@amiddavid)
- 34bd99d: test(proxy): lower the request ceilings in the size tests (#541) (@OsherElhadad)
- fca7288: test(proxy): make the keep-alive strategy control-route test deterministic (#540) (@OsherElhadad)
- 5429fe0: test(proxy): pin the cache-read refresh gate on the summary-substitute path (#545) (@OsherElhadad)
Install
No Go toolchain and no C compiler are needed — the binary is statically linked.
Download the tarball for your platform, untar it, and put context-guru-proxy on your
PATH. The archive unpacks into its own directory, so this is safe to run anywhere:
tar xzf context-guru_*_darwin_arm64.tar.gz
install -m 755 context-guru_*/context-guru-proxy ~/.local/bin/
Then see docs/get-started/quickstart-proxy.md.