Make a file available to the user as a direct download link.
Call this any time you produce a file the user will want to keep:
| Parameter | Required | Description |
|---|---|---|
path |
yes | Absolute path to the file on disk |
filename |
no | Clean download name shown to the user (defaults to the original filename) |
path must be an absolute filesystem path. A relative path like game_project.zip or workspace/report.csv will fail or resolve to the wrong location.
Option 1 — you just wrote the file with filesystem or terminal, you know the full path:
path: "/home/gmikcon/Projects/navi-1/workspace/game_project.zip"
Option 2 — you only have a relative path, resolve it first:
terminal(command="realpath game_project.zip") # → /home/gmikcon/Projects/navi-1/game_project.zip
Option 3 — use filesystem(action="info", path="workspace/game_project.zip") — the result includes the absolute path.
On success the tool returns:
Download ready: game_project.zip (4.2 MB) URL: http://server:8000/sessions/abc123/files/game_project.zip
You must include the URL in your reply to the user. Format it as a markdown link:
Here's your file: [game_project.zip](http://server:8000/sessions/abc123/files/game_project.zip)
Do not just say "the file is ready" without the link. The user cannot find the URL themselves.
# 1. Create the archive terminal(command="cd /home/gmikcon/Projects && zip -r /tmp/game_project.zip game_project/") # 2. Share it — use the absolute path from step 1 share_file(path="/tmp/game_project.zip", filename="game_project.zip") # 3. In your reply: "Here's the archive: [game_project.zip](http://...)"
| Wrong | Right |
|---|---|
path: "game_project.zip" |
path: "/home/gmikcon/Projects/navi-1/game_project.zip" |
path: "workspace/report.csv" |
path: "/home/gmikcon/Projects/navi-1/workspace/report.csv" |
| Saying "the file is ready" without the link | Posting the URL as a markdown link |