Pause, resume, and track large file transfers

See the speed and time left for each Workspace Drive upload, pause and resume it in place, and resume interrupted downloads instead of starting over.

Updated October 22, 2026

While a file uploads to Workspace Drive, its row shows progress and, when available, the speed and time left. Click Pause to stop it and the Play button to continue from where it stopped.

Watch an upload

Each sending file shows its percent and bytes sent so far. When an estimate is available, it also shows the speed and time left. For example: 6% · 25.8 MB of 400.0 MB · 22.4 MB/s · less than a minute left.

The speed is smoothed so it doesn't jump around. After about five seconds without progress, the estimate resets to zero. The row hides the speed and time left until it can estimate them again.

Pause and resume an upload

  1. Open Library › Workspace Drive and start an upload.
  2. Click Pause on the file's row. The row shows where it stopped, for example Paused at 2% · 11.2 MB of 400.0 MB.
  3. Click the Play (Resume) button on the same row to continue.

On the same page, the upload continues from the bytes storage has already received. You don't need to pick the file again unless you reload the page.

Good to know

  • You can't pause a file once it is being saved at the end of the upload.
  • If you reload the page, an upload that was in progress asks you to pick its file again before it can continue.
  • Cancel all also removes files you paused on this page. Uploads restored after a reload stay paused if you have not picked their files again; you can cancel those rows individually.
  • If saving fails at the end, the row shows the error and a Retry button.

Resume a download (API)

GET /api/v1/files/{file_id}/content supports byte ranges, so an interrupted download can continue instead of starting from byte 0. For files streamed directly by the app, successful file responses include Accept-Ranges: bytes and an ETag with the file's SHA-256. These rules apply to those directly streamed files:

  • Send one Range: bytes=… header to get 206 Partial Content with only that part of the file. For example, curl -C - resumes a partial download.
  • A range past the end of the file answers 416 with Content-Range: bytes */<size>.
  • Several ranges in one request answer the whole file.
  • Send If-Range with the ETag you started with. If the file has changed, you get the whole new file instead of a mix of two versions.

Files over 32 MiB redirect to a signed storage download URL instead. The storage URL supports ranges; use the headers returned by storage when resuming that download, rather than assuming the app's SHA-256 ETag or If-Range rules apply there.

For directly streamed files, the download link on agentsky.dev (/api/files/{id}/content) passes ranges through the same way, so seeking in a video reads only the part you jump to.

Related: Store files in Workspace Drive, Use the AgentSky API, What is the Library?.

View as Markdown