VCode home

Screenshots inside the transcript

Agents: claude, codex, opencode · On: phone, desktop

An agent can show you a picture. It copies the file into ~/.v-code-shots and writes a markdown image line pointing at that file through VCode; the image renders in the reply, and tapping it opens it full size. A short screen recording comes as a GIF, which plays in the reply like any picture. A longer one, or one with sound, comes as an MP4 that you tap to play.

Why you would use it

A browser screenshot, a rendered chart, a diagram: anything where describing it costs more than showing it. On a phone this is the only way to see what a Playwright run actually rendered.

How to use it

As the user:

  1. Ask for a screenshot.

  2. The picture appears in the reply.

    A reply with a chart rendered inline between two paragraphs of text

  3. Tap it to open the viewer (#shotview).

    The viewer open over the thread: an IMAGE tag, the image's alt text as the title, share and close buttons, and the picture full width

  4. Zoom in to read the detail. On a phone, pinch with two fingers; the point between your fingers stays where it is. With a mouse, hold Ctrl and turn the wheel over the part you want; a trackpad pinch does the same. The wheel on its own scrolls. Double-click to jump to 2.5× there, and again to fit the picture back to the sheet.

    The same chart zoomed in on its bars, wider than the sheet

  5. Once zoomed, scroll, or drag with one finger or the mouse, to move around.

  6. Swipe left for the thread's next picture and right for the previous one, or press the right and left arrow keys. The swipe works on a fitted picture; double-click or pinch back to fit first.

    The viewer after a swipe: the second picture of the reply, titled Coverage last week, with 2 / 2 in the header

  7. To send the picture somewhere else, a Messenger chat say, tap the share button in the viewer's header (#shotview-share). On a phone the share sheet opens with the picture as a file; pick the app. A GIF arrives still moving. Where the browser cannot share a file, as on most desktops, the picture is saved to your downloads instead and a toast says saved <name>.

  8. The phone's back button closes the viewer and leaves you in the thread; so does the close button (#shotview-close). The next picture opens fitted.

A recording the agent sent as an MP4 or WebM shows in the reply as a chip with ▶ and the line's alt text, not as a picture. Tap it to play it in the file viewer's player (#playview); back or the close button (#playview-close) stops it. When the browser cannot play the file, the player says This browser cannot play <EXT> videos. A recording is not in the swipe through the thread's pictures.

As an agent, from inside a thread:

  1. Write the image into ~/.v-code-shots/<name>.png.
  2. Emit a markdown image line for it in the reply. The exact path is under How it works, and the v-code-screenshots skill carries it.

What you see

The image renders inline, lazily loaded, at the point in the answer where the markdown line was. The viewer shows it full size with the image's alt text in the header (#shotview-name) and the picture itself in #shotview-img. An image written with an empty alt is titled screenshot.

When the thread holds more than one picture, the header also shows where you are among them, such as 2 / 5 (#shotview-count). The swipe steps through every picture the thread shows, top to bottom: those in replies, the images you attached, and a proof's screenshots. It stops at the first and the last; the picture slides back instead.

An attached image you sent renders as a chip on your own message; tapping that opens the same viewer, titled with the file's name.

The picture opens fitted to the sheet's width, never larger than its own size. It zooms from there up to 8× and never below fit. The cursor shows a magnifier over a fitted picture and a hand over a zoomed one. The page around it does not zoom.

Options and settings

Option Default What it changes
shots directory ~/.v-code-shots, then ~/.portal-shots where the server reads the files from (config.shotsDir)

Limits and known gaps