Changelog
New Features
- Page storage in
agno.knowledge.page. Knowledge atomically publishes catalog metadata, filesystem text and vectors, preserves previous revisions when a refresh fails, and exposes bounded sync and async setup, source synchronization, search, read, list and grep APIs. Installed through the newagno[pages]extra. (#9963)Knowledge(page_search=PageSearchConfig(...))provides typed, transaction-local planner controls. Unset scan preferences, costs, worker counts and thresholds inherit the PostgreSQL settings.
PublicSurfacefor public serving: serves selected Agents, native stateless MCP and authenticated durable-sync Workflows, with shared quotas, request and output bounds, CORS and internal-service authentication. (#9963)- Explicitly selected Teams are now servable too, with REST and gzip support. They share the Agent admission, execution and output limits; the roster is reduced and member routes stay private unless independently selected. (#9996)
PageFileSystem(knowledge=...): a bounded read-only page filesystem toolkit with sync and async execution, exposed explicitly throughfiles.tools(). Commands read pages lazily against pinned revisions, list scoped metadata and run bounded literal grep; they cannot execute a shell or write files. (#9997)- Agent dependency callables can receive
run_inputandsession, alongside the existingagentandrun_context. Resolution runs before pre-hooks and reuses successful values on model retries.add_dependencies_to_contextstill defaults to False. (#9963) - AIMLAPI: requests carry a fixed, analytics-only attribution header set, inspectable as
agno.models.aimlapi.AIMLAPI_HEADERSand overridable per model viadefault_headers, where caller-supplied keys win. The headers carry no user data and do not affect routing, model selection or billing. The default model also moves from the retiredgpt-4o-minitogpt-5.6-terra. (#9898)
Improvements
- Workflows report failed steps as
StepErrorfor both raised executor failures and explicitly failed outputs, carrying the current step's identity. Function reports are still preserved asStepOutput, and Agent, Team and nested Workflow content keeps its existing executor stream. Both console streaming printers renderStepErrorexplicitly, showing the original failure and clearing stale progress output. (#10001)
Bug Fixes
- Failed workflow runs are finalized before their terminal streaming event. A workflow that paused during a background stream could fail during a non-streaming continuation, save
ERRORto the database and leave its tracked stream stuck atPAUSED; fresh streaming failures yieldedWorkflowErrorbefore the failed run was saved, so a consumer closing at that event could lose the run entirely. (#10001)- Nested workflow guardrail rejections are no longer retried, which previously replayed earlier child side effects. Explicit
skip_on_failureis honored through the existing final-attempt policy and ordinary executor retries are preserved.
- Nested workflow guardrail rejections are no longer retried, which previously replayed earlier child side effects. Explicit
- Meta Llama and AIMLAPI: every run crashed. Both providers'
_format_messageoverrides had drifted fromOpenAIChat, which passescompress_tool_resultspositionally, so each call raisedTypeError: _format_message() takes 2 positional arguments but 3 were given. (#10031, #9898, fixes #9034) - Anthropic: empty tool arguments are preserved. A zero-argument Claude tool call is an empty input object, which the adapter treated as falsy and omitted
function.argumentsfor. Streaming and non-streaming parsing now serialize every tool input, so empty input becomes"{}". (#8970, fixes #8971) - Cached tool wrappers no longer pin the caller's frame.
validate_callstores the caller'sf_localson the wrapper it builds andFunctioncaches those wrappers for the life of the process, so on Python 3.13 every cached tool kept the wrapping frame alive along with the Agent, session and run state on the stack. The namespace resolver is cleared once the validators are built. (#9941, fixes #9940) - Anonymous native Agent JSON no longer leaks diagnostics: a failed run returned HTTP 200 carrying status
ERRORand nested model diagnostics, and is now a safe503 run_failed, matching the streaming error protection. Authenticated operator diagnostics are unaffected. (#9963) - Page serving corrections across source retries, canonical-link deduplication, publication-time source binding, bounded page checkout and Agent continuation dependency ordering. (#9996)
Breaking Changes
Knowledgeconstructor arguments are keyword-only. Positional calls such asKnowledge("docs")must becomeKnowledge(name="docs").content_dbis now the preferred spelling;contents_dbremains a supported read/write alias sharing the same dataclass field, so serialization, copy anddataclasses.replace(..., contents_db=...)are unchanged. Passing both keywords requires the same object. (#9963)- Page search honours the configured
PgVectorHNSWef_searchinstead of silently forcing 200, so deployments that relied on the implicit 200 should set it explicitly. Page indexes built from interim main builds can carry an implicitef_construction=64and need an operator-managed rebuild; setup reports an actionable error rather than rebuilding automatically. (#9963)
What's Changed
- feat: add coordinated pages and public docs serving by @ashpreetbedi in #9963
- fix: correct page serving and add selected public teams by @ashpreetbedi in #9996
- feat: extract bounded read-only page filesystem by @ashpreetbedi in #9997
- [fix] agno 3.x: drop the caller-frame namespace pydantic keeps on cached tool wrappers by @basnijholt in #9941
- [fix] Preserve empty Anthropic tool arguments by @basnijholt in #8970
- [fix] AIMLAPI: repair broken integration, add revenue attribution headers by @hugoaimlapi in #9898
- fix: forward compress_tool_results in LlamaOpenAI._format_message by @kausmeows in #10031
- fix: finalize failed workflow runs before streaming errors by @ashpreetbedi in #10001
- chore: release 3.0.7 by @ysolanky in #10055
New Contributors
- @hugoaimlapi made their first contribution in #9898
Full Changelog: v3.0.6...v3.0.7