Fetching from the wire…
Public story · 2026-09-08 · high
Cached tool wrappers were holding onto session and run state forever; Meta Llama and AIMLAPI users were crashing outright and need this update.
Why now: Part of the September 8 Agno 3.0.7 release.
Agno 3.0.7 patches a memory leak specific to Python 3.13. Pydantic's validate_call decorator stores the caller's f_locals on the wrapper function it builds, and Agno's Function class caches those wrappers for the life of the process. On 3.13, that combination kept every cached tool holding a reference to its Agent, session, and run state indefinitely, according to the release notes.
For anyone running long-lived agent processes, that's not a cosmetic bug. Every tool call adds another wrapper the garbage collector can't touch, so memory climbs until the process gets killed or restarted. If your agents run for hours or days rather than single requests, you were bleeding memory without any error to point at.
The same release fixes something more urgent for two providers: a signature drift in _format_message was crashing runs on Meta Llama and AIMLAPI outright, not degrading them. If you're on either, this upgrade isn't optional.
3.0.7 also ships two additions unrelated to the fixes. PublicSurface lets you serve a chosen set of agents with shared quotas and bounds on request and output size, aimed at exposing agents without exposing your whole backend. There's also a read-only page filesystem toolkit that's bounded by design: it can't shell out and can't write, which matters if you're giving a tool filesystem access and don't want it to become a shell.
The leak is a reminder that caching decisions inside a framework you didn't write can outlive the assumptions you made about them. Agno cached wrappers assuming they'd be cheap; Pydantic's decorator made them expensive on newer Python with no version bump anywhere warning either project's users. Check whether other cached-wrapper patterns in your stack make the same assumption.
Each link below shares sources, entities, or timing with this story.
Released August 26, two days after 3.0.0 stable: tool schemas are derived once and cached across runs rather than rebuilt per run, and session history loads incrementally per turn so latency stays flat as a conversation grows. The fix list is mostly MCP and Gemini correctness,...
MCPConfig.tools now accepts Agent, Team and Workflow instances plus Toolkit objects, exposing each as its own named MCP tool. You call chief, not run_agent(agent_id="chief"). Toolkits publish one MCP tool per registered method, narrowed by the toolkit's own enable/include/excl...
Runs now get their own agno_runs table with real columns instead of being packed into the session row, which takes session write amplification from O(N²) to O(N) and removes the DynamoDB and Firestore item-size ceiling (GitHub). offload_tool_results=True writes any tool result...
Released August 30, it replaces the 2.x enable_ingest/enable_remove flags with per-tool flags and defaults ingest_path off, since under scope="shared" whatever it loads becomes readable by every agent on that knowledge base. The module moved from agno.tools.knowledge_managemen...
A GitHub repo cataloging Claude Code tips doesn't normally warrant a top story. But shanraisshan/claude-code-best-practice at 53.4K stars isn't a tips list anymore. It's the de facto reference for how an entire generation of developers is learning to work with AI coding agents...
The v2 streaming format brings full type safety to all stream/invoke methods — strongly-typed StreamPart dicts with Pydantic model coercion. v1 remains default so nothing breaks. The langgraph-cli 0.4.14 patch simultaneously resolves three CVEs. LangGraph GitHub
MindPattern daily
One email a day at 7 AM. Sources and a take on every story. Unsubscribe anytime.