Files and image sharing
Upload images to get a short, expiring URL you can paste anywhere, attach files to an agent prompt in chat mode, and browse the files on your host.
Files uploads are being retired. At the end of November 2026, the Files screen, the upload API, and every uploaded image and its short URL will be deleted. To show an agent an image, paste it into the prompt or a chat instead. To put a file into a project, upload it from Browse in the code panel.
Files is Moshi's pastebin-style upload surface. Anything you upload becomes a short HTTPS URL you can drop into Slack, a GitHub issue, an agent prompt, or your desktop browser.
For the agent-prompt paste flow that mimics desktop Cmd-V, see Image paste. This page covers the pastebin use case, the chat-mode attach flow, and browsing files on the host.
What it is for
- Uploading screenshots and photos to get a short URL you can share.
- Keeping a history of recent uploads so you can re-grab a URL without re-uploading.
- Sending content to coding agents that can fetch URLs but can't read the iOS clipboard.
The URLs expire on their own, so you don't have to remember to clean up later.
How uploads work
Tap + and pick Image, Clipboard, or File. Uploads go over HTTPS to Moshi's web service, and the URL is copied to your clipboard when the upload finishes. Authentication reuses your push-notification token, so push notifications must be enabled for Files uploads to work. The screen lists the current limits, such as how long links last and how many uploads you can make per hour.
HTTPS-only keeps the URL host-independent: you can paste it into a desktop browser, a chat app, or a different terminal session entirely — it's not tied to any SSH connection you happen to be on, and it works fine from mosh-only sessions where SSH transport isn't available.
Pastebin use cases
A few examples of the way Files is used day-to-day:
- Snap a photo of a stack trace on a teammate's monitor, upload, paste the URL into Slack.
- Generate a screenshot for an issue, upload, paste the URL straight into
gh issue create. - Save a recurring image (a logo, a reference shot) and re-grab the URL from history rather than re-uploading.
Attaching files in chat mode
The Files screen is built for shareable links. To attach a file (PDF, log, archive, config, code) to a specific agent prompt, use chat mode on the terminal:
- Open the terminal toolbar and switch to chat mode.
- Tap the attach button to open the Add attachment sheet.
- Pick Camera, Photo, Clipboard, or File — the last one opens the iOS document picker for any file type.
The attached file is uploaded inline and referenced in the prompt, so the agent sees it as part of the message. This is the right path when the file is part of a specific prompt and you don't need a long-lived URL.
Good prompt pattern
After copying a URL from Files, paste it into your agent with a direct instruction:
$> Review this screenshot and tell me which UI element is misaligned: https://...
Short, explicit prompts work better than only pasting a URL.
Image list
The Files screen shows uploaded images with thumbnails, creation time, and expiration status. Tap an active image to copy its URL. Long-press an image and choose Delete to remove it from the list.
Expired images cannot be copied as working links. Delete old entries to keep the list clean.
Home screen visibility
Files opens from its icon in the Home header. Choose whether the icon appears under Settings → General → Show on Home. Turn it on if uploads are part of your regular agent or sharing workflow.
Browse files on the host
Uploads go to Moshi's web service. To work with the files on the host itself, use the Browse tab of the code panel, which you open with the diff button in the terminal title (see Diff viewer). It opens at the folder of the session you opened it from, and works in any folder, with or without git. Files travel between the host and your phone through moshi-hook over your SSH connection, never through Moshi's servers.
- Browse: folders show as an expandable tree and update on their own while an agent edits files. Gitignored files are listed, shown muted.
- Open: tap a file to read it as source. Images, videos, and PDFs open as previews, with Show Source and Show Preview to switch. Large files ask before loading.
- Upload: tap Add for Upload Files or Upload Photos & Videos into the current folder, or long-press a folder and choose Upload Here.
- Manage: long-press a file or folder to Copy Path, Download (folders download as a zip), Rename, or Delete.
Browsing needs moshi-hook 0.4.17 or later running on the host. If the host runs an older version, the panel asks you to update it.
What the browser hides
.git, node_modules, and common cache and build-tool folders such as __pycache__, .venv, .next, and DerivedData are hidden. Change the list with moshi-hook set files-exclude, for example:
$moshi-hook set files-exclude node_modules,.git,*.pyc# back to the built-in list$moshi-hook set files-exclude default
Patterns match a file or folder name. none shows everything except .git. See Hook settings for the full default list.
Folders outside your home folder
The browser opens folders inside your home folder. Since moshi-hook 0.4.34 it can open folders outside it too:
- A running agent's folder opens without setup. If an agent is working in
/srv/appor/workspace, browse it from that agent's session. This works on macOS and Linux for agents running in a multiplexer such as tmux or Herdr. Agents started before you updated to 0.4.34 need a restart first. - Any other folder can be added with
files-roots, such as a WSL project on/mnt/c:
$moshi-hook set files-roots /mnt/c/Users/me/proj
Separate several folders with commas. A filesystem root such as / is refused, and moshi-hook set files-roots none clears the list. The change applies to the next folder you open, without a restart. A folder that isn't allowed shows No access to this folder.