With Agno's Knowledge.read_full_page or aread_full_page, an agent that found the right page through search no longer walks it with read_page, one slice at a time, following next_offset to the end. Both methods make a single SQL read against one read-only snapshot, so the text can't change partway through.
hit = knowledge.search_pages("How do agents use tools?").results[0]
body = knowledge.read_full_page(hit.path, revision=hit.revision, max_chars=24_000)
if body is None:
... # longer than the budget, so keep the search excerptsPass the revision from a search hit to pin the read. If someone republished the page after that search, read_full_page raises PageChanged. A page longer than max_chars returns None, and you can fall back to the excerpts you already have. A missing page raises PageNotFound. A read that runs past its timeout raises PageError. The defaults are 24,000 characters and 2 seconds.
read_full_page shares the eight-slot worker pool that Agno's other page reads use.
See the cookbook, and learn more about published pages in the documentation.
Frequently asked questions
Call knowledge.read_full_page(path, revision=..., max_chars=...), or aread_full_page in async code. Agno returns the whole page from a single SQL read against one read-only snapshot.
read_full_page returns None when the page is longer than max_chars, which defaults to 24,000 characters. Your agent can keep the search excerpts it already has in that case.
Pass the revision from the search hit to read_full_page. A republish after that search makes Agno raise PageChanged.

