• English
  • Browser Downloads

    Files downloaded by Chromium are stored inside the sandbox filesystem, so they can be inspected with shell commands or retrieved with the file API.

    Default Download Location

    Chromium normally downloads files to the runtime user's downloads directory:

    /home/gem/Downloads

    You can list it with the file API:

    curl -X POST "http://localhost:8080/v1/file/list" \
      -H "Content-Type: application/json" \
      -d '{"path": "/home/gem/Downloads"}'

    Configure Downloads With CDP

    When using Playwright or another CDP client, set the download behavior before triggering downloads:

    from agent_sandbox import Sandbox
    from playwright.sync_api import sync_playwright
    
    client = Sandbox(base_url="http://localhost:8080")
    cdp_url = client.browser.get_info().cdp_url
    
    with sync_playwright() as p:
        browser = p.chromium.connect_over_cdp(cdp_url)
        page = browser.new_page()
        page.context.set_default_timeout(30_000)

    If you use Chrome DevTools Protocol directly, call Browser.setDownloadBehavior on the browser-level CDP connection:

    {
      "method": "Browser.setDownloadBehavior",
      "params": {
        "behavior": "allow",
        "downloadPath": "/home/gem/Downloads",
        "eventsEnabled": true
      }
    }

    After triggering the download, either listen for Browser.downloadWillBegin and Browser.downloadProgress, or inspect the download directory with the file API.

    Retrieve A Downloaded File

    curl -L \
      "http://localhost:8080/v1/file/download?path=/home/gem/Downloads/report.pdf" \
      --output report.pdf

    If the downloaded artifact may still be changing, append change_policy=abort so the server aborts when it detects source-file changes.

    Security Notes

    • Treat downloaded files as untrusted input.
    • Keep downloads in the sandbox unless the user explicitly needs them.
    • Avoid enabling broad local file access unless a task requires it.