Agno 2.6.8 Adds Managed-Agent Delegation, Then Quietly Fixes the Path Traversal Problems That Matter More

Agno 2.6.8 Adds Managed-Agent Delegation, Then Quietly Fixes the Path Traversal Problems That Matter More

Agno 2.6.8 has the shape of a modern agent-framework release: a shiny delegation feature on top, a pile of runtime hardening underneath, and the hardening is the part teams will be grateful for three months from now.

The release adds first-party support for Google’s Antigravity API and Gemini managed agents through AntigravityAgent and AntigravityTools. That is the marketable story. Agno agents can now delegate work into managed sandboxes and provider-hosted agent paths, including Deep Research and Antigravity-style interactions with background streaming, reconnect and resume via last_event_id, MCP servers, file-search stores, stateful interactions, and per-agent background/store behavior.

The more durable story is that Agno also centralized path safety across file generation, Slack tools, toolkit path checks, skills, and file tools. In other words: as the framework learns to send work into more places, it is also tightening the bridge between agent intent and local resources. That is the right order of operations.

Delegation makes the framework a border crossing.

Managed-agent delegation is where the agent-framework market is heading. Local orchestration libraries are becoming routers across provider-native agents, managed Linux sandboxes, MCP services, vector/file stores, and application tools. That is useful because not every task should run in the same harness. A Deep Research-style agent, a coding sandbox, a Slack incident workflow, and a local file tool have different execution models.

But routing is not free. Once a framework becomes the place where external agents, local files, Slack actions, MCP clients, and provider histories meet, its job is no longer just “call the model.” Its job is to preserve state, maintain boundaries, avoid over-sharing context, reconnect streams correctly, and make sure generated paths do not escape into places they should not go. Delegation expands capability. It also expands the number of trust boundaries.

That is why the path-safety sweep is the release’s most important operator detail. Agno now centralizes path handling in agno.utils.path_safety with safe_join and safe_join_subpath, applying it to FileGenerationTools, SlackTools, Toolkit._check_path, agno.skills.utils.is_safe_path, and FileTools.check_escape. The release note explicitly calls out path traversal, symlink escape, control-character injection, Windows MagicDot, and Unicode normalization attacks. That list is not theoretical. It is the list you get when user-supplied or model-generated paths meet real filesystems.

File paths are a perfect example of agent-runtime risk because they look harmless in prompts. “Save this as report.md” is fine. “Save this as ../../.ssh/config” is not. A Slack attachment name, generated artifact path, skill output, or file-tool argument can carry enough ambiguity to escape the intended directory if every tool implements path checks slightly differently. Centralizing the primitive is the architectural win. Path safety should not be tribal knowledge copied into five tools with five subtly different edge cases.

Provider-native state is now application state.

Agno’s Gemini Interactions work shows another shift. PR #7973 fixes advanced generation_config pass-through for values such as top_k and presence_penalty, but the more interesting fix is state handling. When previous_interaction_id is set, Agno now sends only messages after the prior assistant turn instead of replaying the full history. The PR notes that multi-turn Interactions API usage still requires a database so the interaction_id persists on assistant messages between turns.

That is exactly how provider-stateful APIs should behave. If the provider already has the earlier state, replaying the full history wastes tokens and can confuse the interaction with duplicated context. Sending only the delta respects the API contract. It also pushes a real requirement onto application builders: if you want stateful managed-agent interactions, you need durable storage for provider IDs. A chat transcript is no longer enough. Provider-native state handles become part of your application data model.

The Anthropic fixes point in the same direction. PR #7766 preserves Anthropic-specific content blocks such as server_tool_use and code-execution results in message history because dropping them breaks multi-turn server-tool flows. PR #7977 hardens that behavior by switching to the canonical redacted_thinking literal, accepting both streaming spellings, adding a dedup guard for round-tripped server-tool blocks, logging coercion failures, and coercing non-block tool-result items to text.

That is not glamorous work, but it is framework work. Providers increasingly expose structured blocks that are neither plain text nor generic tool calls. If a framework flattens, drops, duplicates, or mislabels those blocks, the next turn may fail even though the previous call looked successful. Agent frameworks will win by preserving provider semantics accurately while hiding enough of the weirdness that application developers do not have to become part-time protocol archaeologists.

MCP traffic needs fingerprints, not mystery clients.

PR #7857 adds User-Agent: agno/<version> to every ParallelMCPBackend request so Parallel can distinguish Agno traffic from generic python-httpx/<version> clients. This is small, but it is the kind of small that signals MCP is moving from local demos into operated infrastructure.

A versioned user agent is not a security control by itself. It is an observability primitive. When an MCP server is debugging auth failures, rate limits, strange payloads, or tool-call regressions, knowing which framework and version generated the traffic matters. “Some Python client did it” is not enough once MCP endpoints are shared by real users and real automations.

The release also bumps Python support to >=3.9,<4, includes 18 data-labeling cookbook workflows, adds a deterministic Slack human-in-the-loop incident-commander demo, surfaces Google Drive incompleteSearch, adds missing aiohttp to the Slack extra, preserves generic Gemini error context when str(error) is empty, and resolves n1n: model strings in get_model(). None of those individually changes the market. Together, they make the framework feel less like a prompt wrapper and more like an integration runtime.

Public reaction was thin during the research window. Hacker News searches for Agno 2.6.8, Antigravity, and path safety returned no useful release-specific discussion; Reddit was similarly noisy. That is fine. The audience for this patch is not the commentariat. It is the team that discovers an agent-generated filename can traverse a symlink, or that an Anthropic server-tool result vanished between turns, or that their managed Gemini interaction is replaying the whole transcript because the state ID never persisted.

Practitioners should upgrade if they use Agno file, Slack, skill, or toolkit path operations. Then test the ugly cases: symlinks, .. segments, Unicode lookalikes, control characters, Windows path edge cases, and model-generated artifact names. If you adopt Gemini Interactions or Antigravity delegation, confirm interaction IDs are persisted in your database and that resumed streams behave after disconnects. If you rely on Anthropic server tools, regression-test multi-turn flows and inspect the stored message history for preserved provider blocks. If you operate MCP services, use the new user-agent signal in logs and support workflows.

The editorial take: “Agno supports Google managed agents” is the easy headline. The sharper one is that agent frameworks are becoming delegation routers, and delegation routers need boring centralized safety around paths, provider-native history, MCP attribution, and resumable state. The bridge is where the bugs live. Agno 2.6.8 spends meaningful time on the bridge.

Sources: Agno v2.6.8 release, PR #7973, PR #7977, PR #7766, PR #7857, Agno GitHub repository