> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agno.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Payloads on Disk

> By default the stored payload goes to AgentFS on the agent's database.

By default the stored payload goes to AgentFS on the agent's database. The `fs` setting points payloads at any AgentFS backend instead: a local directory, a different table, a different database. The index rows stay in `agno_tool_results` on the agent's db either way, and carry the namespace and path of each payload, so the read-back tools and the session-delete cascade find it.

```python payloads_on_disk.py theme={null}
"""
Payloads on Disk
================

By default the stored payload goes to AgentFS on the agent's database. The
`fs` setting points payloads at any AgentFS backend instead: a local
directory, a different table, a different database. The index rows stay in
`agno_tool_results` on the agent's db either way, and carry the namespace and
path of each payload, so the read-back tools and the session-delete cascade
find it.

This example writes payloads to a local directory and lists the files it
leaves behind. One caveat to know: a process that never built a store with
this `fs` (a separate cleanup script, say) cannot reach these files when it
deletes the session; it removes the index rows and logs exactly which payload
paths it could not reach.
"""

import os

from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.fs import FileSystem
from agno.fs.local import LocalFileSystem
from agno.models.openai import OpenAIResponses
from agno.offload import ResultStore

db = SqliteDb(db_file="tmp/payloads_on_disk.db")
PAYLOAD_DIR = "tmp/offloaded_payloads"

MANIFEST = "\n".join(
    f"{i:05d},container-{i % 211},{(i * 7) % 1000}kg,{'cold' if i % 3 == 0 else 'dry'}"
    for i in range(1, 1201)
)


def load_shipping_manifest() -> str:
    """Load the full shipping manifest as CSV.

    Returns:
        str: id,container,weight,storage per line.
    """
    return MANIFEST


# ---------------------------------------------------------------------------
# Create Agent with payloads on a local directory
# ---------------------------------------------------------------------------
agent = Agent(
    model=OpenAIResponses(id="gpt-5.5"),
    db=db,
    tools=[load_shipping_manifest],
    offload_tool_results=ResultStore(
        fs=FileSystem(backend=LocalFileSystem(root=PAYLOAD_DIR))
    ),
    markdown=True,
)


def list_payload_files() -> None:
    found = False
    for directory, _, files in os.walk(PAYLOAD_DIR):
        for name in files:
            path = os.path.join(directory, name)
            print(f"   {path} ({os.path.getsize(path)} bytes)")
            found = True
    if not found:
        print("   (no files)")


# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    session_id = "payloads-on-disk"
    output = agent.run(
        "Load the shipping manifest and tell me how many rows need cold storage. Use search_result.",
        session_id=session_id,
    )
    print(output.content)

    print("\nIndex rows stay on the agent's database:")
    for row in db.get_tool_results_for_session(session_id):
        print(
            f"   {row['result_id']} -> {row['namespace']}/{row['path']} ({row['size_bytes']} bytes)"
        )

    print(f"\nPayload files under {PAYLOAD_DIR}:")
    list_payload_files()

    # Deleting the session removes the index rows and, through the store this
    # process built, the files as well.
    db.delete_session(session_id=session_id)
    print("\nAfter delete_session:")
    print(f"   index rows: {len(db.get_tool_results_for_session(session_id))}")
    list_payload_files()
```

## Run the Example

<Steps>
  <Snippet file="create-venv-step.mdx" />

  <Step title="Install dependencies">
    ```bash theme={null}
    uv pip install -U agno openai sqlalchemy
    ```
  </Step>

  <Step title="Export your OpenAI API key">
    <CodeGroup>
      ```bash Mac/Linux theme={null}
      export OPENAI_API_KEY="your_openai_api_key_here"
      ```

      ```bash Windows theme={null}
      $Env:OPENAI_API_KEY="your_openai_api_key_here"
      ```
    </CodeGroup>
  </Step>

  <Step title="Run the example">
    Save the code above as `payloads_on_disk.py`, then run:

    ```bash theme={null}
    python payloads_on_disk.py
    ```
  </Step>
</Steps>

Full source: [cookbook/02\_agents/22\_result\_offloading/05\_payloads\_on\_disk.py](https://github.com/agno-agi/agno/blob/v3.0.4/cookbook/02_agents/22_result_offloading/05_payloads_on_disk.py)
