Token optimization
This project ships a token-optimizer MCP server whose tools cut context usage
60–90% via caching, diffing, and compression. Prefer them over the built-in
tools in the situations below. The native hook refuses expensive built-in calls
and injects applicable graph findings; the active model still makes every MCP
tool call itself.
When to use which tool
smart_readinstead ofReadwhen a file is large (roughly >400 lines / >25 KB) or you have read it before this session. It caches file content and, on re-reads, returns only a diff of what changed — often a handful of tokens instead of the whole file. Passpath; optionallyenableCache,diffMode,maxSize,includeMetadata.smart_globinstead ofGrep/Globfor finding files in a big or unfamiliar tree. It returns paths only (no content) with filtering, sorting, and pagination — a fraction of the tokens of listing with content. Passpattern(e.g.src/**/*.ts) and optionallycwd,extensions,limit.smart_editinstead ofEditfor large files: it applies the edit and returns a compact unified diff rather than echoing the whole file. (For very small files a plainEditis fine — smart_edit's diff overhead is only worth it once the file is sizeable.)optimize_session/get_session_statswhen the context window is filling up or after a burst of file operations.optimize_sessionbatch-compresses prior file operations and stores them out-of-context;get_session_statsreports tokens saved so far.get_optimization_reportwhen the user asks how much they've saved (or to show it proactively). Returns total tokens saved, overall savings %, approximate cost saved, and a full breakdown by action, by hook phase, and by MCP server, plus a pre-renderedformattedtext summary you can display as-is. (The per-toolget_hook_analytics/get_action_analytics/get_mcp_server_analytics/export_analyticstools give the raw dimensions.)count_tokensto measure how expensive a chunk of text is before you decide how to handle it.
Live graph
- Call
wiki_writewhen you establish a durable, non-obvious conclusion: a failed approach and why, a decision and its rejected alternative, or a command that finally worked. Anchor it to a real file orpath#symbol, and include its concrete evidence, applicability, calibratedconfidenceLabel, scope, and invalidators. - Perform this semantic harvest yourself while you still hold the reasoning. Do not delegate it to another model, and do not invent a finding merely to populate the graph.
- Applicable findings are injected automatically when their file or command is
touched. Use
wiki_readfor an explicit lookup.
Storing bulky content out of context
optimize_text— compress a large text blob under akeyand keep it in the external cache instead of your context; retrieve it later by key. ReportstokensSaved. Good for logs, large outputs, or reference material you don't need inline right now.compress_text— Brotli+base64 compression. Byte reduction only: the base64 output usually has more LLM tokens than the input, so use it for at-rest storage/caching, not for putting back into context. The tool returnsincreasesTokens+ a warning when that's the case.
Rules of thumb
- Reading a big file or one you've seen before →
smart_read. - Searching a large/unknown tree →
smart_glob(paths first, read only what you need). - Editing a large file →
smart_edit. - Context getting tight →
optimize_session, then continue. - Need to stash bulky output →
optimize_text(by key), notcompress_textinto context. - Small files/one-off reads → the built-in tools are fine; don't add overhead.