pub struct ContextOverhead {
pub tool_count: usize,
pub tool_schema_tokens: usize,
pub instruction_tokens: usize,
pub rules_block_tokens: usize,
}Expand description
A measured breakdown, in tokens, of the per-turn context lean-ctx adds.
Fields§
§tool_count: usizeNumber of MCP tools exposed (the schema-bearing surface).
tool_schema_tokens: usizeTokens for all exposed tool descriptions + input schemas.
instruction_tokens: usizeTokens for the MCP server instructions block (capped at the instruction budget).
rules_block_tokens: usizeTokens for the rules block injected into the host instruction file.
Implementations§
Source§impl ContextOverhead
impl ContextOverhead
Sourcepub fn total_tokens(&self) -> usize
pub fn total_tokens(&self) -> usize
Total per-turn overhead in tokens.
Sourcepub fn cached() -> Self
pub fn cached() -> Self
Process-cached overhead. The tool surface and rules block are static and
the instruction block varies only with slow-moving session state, so a
once-per-process measurement is the right tradeoff for callers that render
repeatedly (the gain dashboard re-renders every second in --live) —
it avoids per-tick disk I/O and re-tokenization.
Sourcepub fn measure() -> Self
pub fn measure() -> Self
Measure the overhead for the currently-configured MCP surface. Uses the
same advertisement policy as the live tools/list handler (candidate
set, profile gates, invoker, description compression), so the number
reflects what this install actually advertises (#572).
Sourcepub fn measure_for_client(client_name: &str) -> Self
pub fn measure_for_client(client_name: &str) -> Self
Self::measure with the instructions a named MCP client receives
(clientInfo.name, e.g. claude-code): hook-covered clients and
clients with an instruction cap get a different block.
Source§impl ContextOverhead
impl ContextOverhead
Sourcepub fn measure_governor(arm: GovernorArm) -> Self
pub fn measure_governor(arm: GovernorArm) -> Self
Per-turn prefix of the Claude Code governor setup (governor
design v1, slice 1). Its hooks emit no session or per-prompt text, so
the prefix is the rule block plus, in the MCP arm, one deferred-tool
name line per tool: initialize instructions are suppressed
(LEAN_CTX_RULES_INJECTION=off on the server) and schemas stay behind
Tool Search until fetched (alwaysLoad: false). The name-line cost
models Claude Code’s deferred-tool listing [inference, bench-verified].
Trait Implementations§
Source§impl Clone for ContextOverhead
impl Clone for ContextOverhead
impl Copy for ContextOverhead
Source§impl Debug for ContextOverhead
impl Debug for ContextOverhead
Source§impl Default for ContextOverhead
impl Default for ContextOverhead
impl Eq for ContextOverhead
Source§impl PartialEq for ContextOverhead
impl PartialEq for ContextOverhead
impl StructuralPartialEq for ContextOverhead
Auto Trait Implementations§
impl Freeze for ContextOverhead
impl RefUnwindSafe for ContextOverhead
impl Send for ContextOverhead
impl Sync for ContextOverhead
impl Unpin for ContextOverhead
impl UnsafeUnpin for ContextOverhead
impl UnwindSafe for ContextOverhead
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more