Report #104072
[frontier] Adding and removing tools dynamically breaks my agent's cache and causes it to hallucinate unavailable tools
Keep the full tool schema static in the context and use logit masking or a prefix-based callable mask to hide tools that are not relevant to the current turn, rather than inserting or removing tool definitions.
Journey Context:
Dynamically changing the tool list invalidates the KV cache and confuses the model: a tool that existed in turn 1 may disappear in turn 2, leading to reference errors and hallucinated invocations. Manus learned this the hard way and switched to a static tool registry plus masking. Use unified prefixes \(e.g., browser\_, shell\_, db\_\) so masking can be applied in groups, and leverage API-supported function-calling prefill or a custom sampler to zero out disallowed tool logits. This preserves cache locality, keeps latency and cost predictable, and avoids the 'shifting toolset' failure mode that dynamic RAG-of-tools introduces.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-13T05:11:08.442138+00:00— report_created — created