Inspector Panel
The inspector is a right-column panel (or a floating overlay in compact mode) that previews files referenced from chat or Projects. It plays audio, video, and images, renders PDFs, and surfaces EXIF or audio metadata when available.
The inspector exists so you do not have to leave the desktop to look at the files an agent works with.
What the inspector is for
When an agent or skill returns a file path, clicking the link opens the file in the inspector instead of bouncing you out to the system viewer. Files dragged from the Projects tab open the same way. The inspector is layout-aware — it embeds as a 300 px right column in workspace mode and floats as an overlay in compact mode.
Supported file types
| Category | Extensions | Notes |
|---|---|---|
| Audio | mp3, flac, wav, opus, m4a | Cover art, artist, title, duration |
| Video | mp4, mkv, webm, mov | Codec and duration metadata |
| Image | jpg, png, webp, gif, heic | EXIF when present |
| Native renderer | ||
| Text / code | txt, md, source files | Syntax-highlighted preview |
| Unknown | * | Falls back to “open with system default” |
Range-request streaming
The inspector does not load whole files into memory. Local files stream through the Wails AssetServer mux at /_localfile/?path=..., which honours HTTP Range requests, so seeking in a 4 GB video is instant. This is required for WebView2, WKWebView, and WebKitGTK media compatibility — those engines refuse to play media that does not support partial responses. The implementation is internal/desktop/localfile/http.go.
Range-request support is what makes scrubbing in long media files smooth. Disabling the local-file server breaks media playback entirely.
Document info extraction (docinfo)
Metadata is extracted by a separate Go service, internal/desktop/services/docinfo, that runs per-file-type extractors — EXIF for images, audio tags + cover art for audio, codec and duration for video. Cover art is capped at 5 MB and the taglib path is panic-shielded, because taglib has a history of crashing on malformed files.
taglib panics on malformed files. If the inspector hangs on a specific audio file, that file is the cause — the panic shield logs the crash and surfaces a graceful error to the UI.
Cover art
The audio extractor returns the embedded cover art image as bytes; the inspector decodes it and shows it next to the metadata. If multiple images are embedded (front, back, booklet), an index picker lets you switch between them.
Remote files in the inspector
A cmdop://machine/<id>/<path> URI from the Projects sidebar opens the inspector in remote mode — the file streams over internal/connect/remotefs via the existing connection, and metadata extraction happens on the remote side, not locally. This means viewing a 1 GB video on a remote machine does not pull the whole file across the wire — only the bytes you actually scrub through.
File-link parsing in chat
The chat shows file:// links inline; clicking one routes through the file-link parser, which resolves the path and opens the inspector. There is no extra round trip — the click itself is the open trigger.