Agno's Claude model saves each text block with model_dump(exclude_none=True), which removed a citation's document_title whenever Claude returned it as null. Anthropic declares that field required but nullable, so replaying the saved answer on the next turn failed with HTTP 400 page_location.document_title: Field required.
Agno's shared content-block helper now puts document_title: None back on page_location, char_location and content_block_location citations when the key is missing. It runs on response capture and on replay, so sessions saved by earlier releases recover too, and it formats copies so your stored history stays as it was.
We parsed a Claude response with a null-titled page citation offline and printed the citation Agno sends on the following turn:
Before
{
"cited_text": "Revenue grew 12%",
"document_index": 0,
"end_page_number": 4,
"start_page_number": 3,
"type": "page_location"
}
Now
{
"document_title": null,
"cited_text": "Revenue grew 12%",
"document_index": 0,
"end_page_number": 4,
"start_page_number": 3,
"type": "page_location"
}Existing titles, signed thinking blocks, block order and web search citations behave as before.
See the cookbook, and learn more about reading Claude citations from a PDF in the documentation.
Frequently asked questions
Claude returned a document citation with document_title: null, and Agno dropped the null key when it saved the answer. Anthropic requires the key on the next request, so replaying that history failed with HTTP 400. This release restores it.
No. Agno adds the missing document_title back each time it formats a request, so histories stored without the key replay correctly. It works on copies and leaves the stored session as it was.
Page, character and content-block document citations (page_location, char_location and content_block_location). Citations that already carry a title keep it, and web search citations are unchanged.


