class CaesarReadInput(BaseModel):
target: str = Field(..., description="Caesar doc_id or URL")
query: str | None = Field(None, description="Optional focus question")
max_chars: int | None = Field(None, description="Optional maximum characters to return")
class CaesarReadTool(BaseTool):
name: str = "web_fetch"
description: str = "Read a Caesar doc_id or URL as clean markdown."
args_schema: Type[BaseModel] = CaesarReadInput
def _run(self, target: str, query: str | None = None, max_chars: int | None = None) -> str:
response = client.read(target, query=query, max_chars=max_chars)
return response.model_dump_json()
tools = [CaesarSearchTool(), CaesarReadTool()]