Token optimization
First inspect the current tool inventory. Use a named token-optimizer MCP tool
only when that exact schema is visible; an installed plugin or MCP config is not
proof that its server registered successfully. If the tool is absent, keep the
native operation available, bound its output, and do not retry an unavailable
schema.
When registered, these tools cache, diff, and bound context. The native hook
refuses a built-in call only after positive registration evidence and injects
applicable graph findings; the active model still makes every MCP tool call.
When to use which tool
smart_read instead of a plain file read when 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. Pass path; optionally
enableCache, diffMode, maxSize, includeMetadata.
smart_glob instead of a content grep for 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.
Pass pattern (e.g. src/**/*.ts) and optionally cwd, extensions,
limit.
smart_edit instead of a raw edit for large files: it applies the
edit and returns a compact unified diff rather than echoing the whole
file. (For very small files a plain edit is fine — smart_edit's diff overhead
is only worth it once the file is sizeable.)
optimize_session / get_session_stats when the context window is
filling up or after a burst of file operations. optimize_session
batch-compresses prior file operations and stores them out-of-context;
get_session_stats reports tokens saved so far.
get_optimization_report when 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-rendered formatted text summary you can display
as-is.
count_tokens to measure how expensive a chunk of text is before you
decide how to handle it.
Live graph
- When
wiki_write is visible, call it when 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 or path#symbol, and
include its concrete evidence, applicability, calibrated confidenceLabel,
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.
- If
wiki_write is absent, do not claim semantic harvesting succeeded.
- Applicable findings are injected automatically when their file or command is
touched. Use
wiki_read for an explicit lookup.
Storing bulky content out of context
optimize_text — compress a large text blob under a key and keep it in
the external cache instead of your context; retrieve it later by key. Reports
tokensSaved. 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
returns increasesTokens + 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), not compress_text
into context.
- Small files/one-off reads → the built-in tools are fine; don't add overhead.
1---2name: token-optimization3description: Use the token-optimizer MCP tools to reduce context/token usage when reading, searching, or editing files, or when the context window is filling up. Trigger when reading large files, re-reading files already seen, searching a big/unknown tree, making edits to large files, or when you need to store bulky output out-of-context.4---56# Token optimization78First inspect the current tool inventory. Use a named token-optimizer MCP tool9only when that exact schema is visible; an installed plugin or MCP config is not10proof that its server registered successfully. If the tool is absent, keep the11native operation available, bound its output, and do not retry an unavailable12schema.1314When registered, these tools cache, diff, and bound context. The native hook15refuses a built-in call only after positive registration evidence and injects16applicable graph findings; the active model still makes every MCP tool call.1718## When to use which tool1920- **`smart_read`** instead of a plain file read when a file is **large**21 (roughly >400 lines / >25 KB) or you have **read it before this session**. It22 caches file content and, on re-reads, returns only a **diff** of what changed23 — often a handful of tokens instead of the whole file. Pass `path`; optionally24 `enableCache`, `diffMode`, `maxSize`, `includeMetadata`.2526- **`smart_glob`** instead of a content grep for finding files in a **big or27 unfamiliar tree**. It returns **paths only** (no content) with filtering,28 sorting, and pagination — a fraction of the tokens of listing with content.29 Pass `pattern` (e.g. `src/**/*.ts`) and optionally `cwd`, `extensions`,30 `limit`.3132- **`smart_edit`** instead of a raw edit for **large files**: it applies the33 edit and returns a compact unified **diff** rather than echoing the whole34 file. (For very small files a plain edit is fine — smart_edit's diff overhead35 is only worth it once the file is sizeable.)3637- **`optimize_session`** / **`get_session_stats`** when the **context window is38 filling up** or after a burst of file operations. `optimize_session`39 batch-compresses prior file operations and stores them out-of-context;40 `get_session_stats` reports tokens saved so far.4142- **`get_optimization_report`** when the user asks **how much they've saved**43 (or to show it proactively). Returns total tokens saved, overall savings %,44 approximate cost saved, and a full breakdown **by action, by hook phase, and45 by MCP server**, plus a pre-rendered `formatted` text summary you can display46 as-is.4748- **`count_tokens`** to measure how expensive a chunk of text is before you49 decide how to handle it.5051## Live graph5253- When **`wiki_write`** is visible, call it when you establish a durable,54 non-obvious conclusion:55 a failed approach and why, a decision and its rejected alternative, or a56 command that finally worked. Anchor it to a real file or `path#symbol`, and57 include its concrete evidence, applicability, calibrated `confidenceLabel`,58 scope, and invalidators.59- Perform this semantic harvest yourself while you still hold the reasoning.60 Do not delegate it to another model, and do not invent a finding merely to61 populate the graph.62- If `wiki_write` is absent, do not claim semantic harvesting succeeded.63- Applicable findings are injected automatically when their file or command is64 touched. Use **`wiki_read`** for an explicit lookup.6566## Storing bulky content out of context6768- **`optimize_text`** — compress a large text blob under a `key` and keep it in69 the external cache instead of your context; retrieve it later by key. Reports70 `tokensSaved`. Good for logs, large outputs, or reference material you don't71 need inline right now.7273- **`compress_text`** — Brotli+base64 compression. **Byte** reduction only:74 the base64 output usually has **more** LLM tokens than the input, so use it75 for **at-rest storage/caching, not for putting back into context.** The tool76 returns `increasesTokens` + a warning when that's the case.7778## Rules of thumb79801. Reading a big file or one you've seen before → `smart_read`.812. Searching a large/unknown tree → `smart_glob` (paths first, read only what82 you need).833. Editing a large file → `smart_edit`.844. Context getting tight → `optimize_session`, then continue.855. Need to stash bulky output → `optimize_text` (by key), not `compress_text`86 into context.876. Small files/one-off reads → the built-in tools are fine; don't add overhead.