Showing a file in chat
Your chat replies are rendered as markdown, so you can put a file in front of the user directly -- there is no upload step and no external hosting. The system interface serves a file at its absolute on-disk path, so the path you write in the markdown doubles as the URL the user's browser fetches. Images render inline; any other file is offered as a download.
Where to put the file
A file you show or share lives in a sensible, visible home under data/ --
there is no special chat directory. Put it where it topically belongs: the
relevant project folder if one exists (e.g. data/my-project/), else
data/documents/ for files and data/images/ for standalone images (create
either with mkdir -p if it does not exist). Everything under data/ is
gitignored and persists via the restic host backup.
Show an image inline
Write the image to its home (see above), giving it a unique, descriptive filename, e.g.
revenue-by-quarter-2026.png. Served image URLs are cached immutably, so reusing a filename would leave the user looking at the stale image.Reference it by its absolute on-disk path with markdown image syntax:
The path must be absolute (start with
/). A relative path such aswill not render.
Supported inline image formats: .png, .jpg / .jpeg, .gif, .webp, .avif, .bmp, .ico, .svg.
Offer a file for download
For anything that is not an image -- a PDF, CSV, log, zip, spreadsheet, etc. -- write the file to its home (see "Where to put the file" above; any path works) and reference its absolute path with an ordinary markdown link (not image syntax):
[Q4 report (PDF)](/home/user/workspace/data/documents/q4-report.pdf)
Clicking the link downloads the file. There is nothing else to do -- the system interface serves non-image files with a download disposition, so a plain link becomes a download. Use a clear label that says what the file is.
Embed an image from a public URL
If the image already lives at a public URL, embed that URL directly -- no local file needed:

Use the public-URL form for images you are referencing from the web, and the local absolute-path form for files you produced on this machine.
Notes
- Both images and download links require an absolute path (starting with
/) that points at a file that actually exists on disk. - If an image shows a broken-image icon, the usual cause is a relative or mistyped path, or an extension that is not one of the inline image formats above (a non-image extension is treated as a download, not an inline image).
- Only the exact file you reference is served; there is no directory listing.