# Show Files In Chat

> Show a file to the user in chat. Display an image inline (chart, plot, screenshot, diagram, rendered figure, photo), or offer any other file (PDF, CSV, log, zip, spreadsheet, ...) as a download link. Use whenever you have a file on disk you want the user to see or download, or want to embed an image from a public URL.

- Skill: `imbue-ai/show-files-in-chat` (Agent Skill)
- Install (CLI): `npx skillmds@latest add imbue-ai/show-files-in-chat`
- Raw SKILL.md: https://api.skillmd.com/api/skills/imbue-ai/show-files-in-chat/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: imbue-ai (https://skillmd.com/u/imbue-ai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/imbue-ai/show-files-in-chat

---


# 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

1. 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.

2. Reference it by its **absolute** on-disk path with markdown image syntax:

   ```
   ![Revenue by quarter](/home/user/workspace/data/images/revenue-by-quarter-2026.png)
   ```

   The path must be absolute (start with `/`). A relative path such as
   `![x](data/images/x.png)` will 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:

```
![alt text](https://example.com/image.png)
```

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.

