Appearance
File Path Previews
Absolute file paths that show up in a session terminal or in a chat transcript are previewable in place: hover a path (or tap it on a phone) and Hive reads the file from the node that owns it and shows it in a small card - image, audio, video, or the head of a text file.
This closes the loop on pasted attachments. Pasting an image into a terminal uploads it to the daemon and types its path at the prompt (/var/lib/hive/attachments/<session>/paste-1786690246488.png), and agents print paths constantly. Before, that path was dead text and checking what it pointed at meant opening the Files explorer.
Where it works
| Surface | Trigger |
|---|---|
Session terminal (PtyTerminal) | Paths are underlined on hover; hover previews, click pins the card |
| Agent chat transcript (session chats, first-class Chats, team messages) | Hover a path, or tap it on touch |
| Chat history and the streaming turn alike | Same handles - history is rendered through the same Markdown pipeline |
Markdown links and images that point at a local path are rendered as preview handles too, so  becomes a preview handle instead of a broken <img> (a daemon-side path is not a URL the WebView can fetch). Remote http(s) images and links keep their normal behaviour.
What is previewable
Detection is by extension, matching the Files explorer:
- Images - png, jpg/jpeg, gif, webp, avif, bmp, ico, svg
- Audio - mp3, wav, ogg/oga, flac, m4a, aac, opus
- Video - mp4, m4v, webm, mov, mkv, ogv
- Text and code - md, txt, log, json, yaml/yml, toml, rs, ts/tsx, js/jsx, vue, py, go, sh, sql, and the rest of the usual set (first 60 lines are shown)
Anything else - an extensionless path, a binary, a socket - is left as plain text, so ordinary prose does not fill up with false handles. Paths inside code spans and fenced blocks are never turned into handles, and the path component of a URL is ignored.
Quoted paths containing spaces ("/home/dan/my notes/todo.md", the form the terminal paste flow types) are matched whole.
Where the bytes come from
The card reads through the same FsReadText / FsReadBinary wire messages the Files explorer uses, addressed to the node that owns the session. A chat that ran on another node previews its files over cluster forwarding exactly like a local one, and the store's cache means hovering the same path twice costs nothing.
Reads are subject to the daemon's own size cap; a file over the cap reports the daemon's error in the card rather than silently showing nothing.
Interaction details
- Hover opens after a short delay, so scanning a transcript full of paths does not flash cards
- The card stays open while the pointer is over it, closes shortly after leaving
- Click (desktop) or tap (touch) pins the card: on touch it opens as a centred sheet with a backdrop and a close button, since there is no hover there
Escapecloses a pinned card; scrolling closes an unpinned one- Path handles are keyboard reachable -
Tabto one,EnterorSpaceopens it
Related
- File Explorer - clipboard and drag-and-drop attachments for terminal prompts, and where pasted files land
- Files Explorer - full-filesystem browsing and the
Fs*wire protocol the preview reuses - Chats - chat attachments, which are linked context rather than printed paths