Skip to main content
Each cloud desktop has a per-desktop shared drive backed by EFS. Files persist across controller rebinds, are scoped to the desktop (no cross-desktop visibility), and uploads are capped at 100 MiB.

List Files

nen desktop files list dsk_abc123def456
NAME              SIZE      MODIFIED
Documents/        <DIR>     just now
report.pdf        102400    just now
notes.txt         512       2m ago
Directory entries render with a trailing / on the name and <DIR> in the size column (a trailing / in --quiet mode). Pass --path <subdir> (or -p <subdir>) to list a specific subdirectory. -q prints names only and --json prints the structured form.

API

curl -H "Authorization: Bearer sk_nen_..." \
  "https://desktop.api.getnen.ai/desktops/dsk_abc123def456/files"
{"files":[
  {"name":"report.pdf","size":102400,"modified":1779229492.703},
  {"name":"Documents","size":0,"modified":1779229490.001,"is_dir":true}
]}
To list a subdirectory, pass ?path=<subdir>:
curl -H "Authorization: Bearer sk_nen_..." \
  "https://desktop.api.getnen.ai/desktops/dsk_abc123def456/files?path=Documents"

Upload a File

nen desktop files upload dsk_abc123def456 ./report.pdf
The remote name defaults to the basename of the local path; override with --name. Content-Type is detected from the file extension and falls back to application/octet-stream. Pass --path <subdir> to upload into a subdirectory; missing intermediate directories are created on the server.

API

curl -X POST -H "Authorization: Bearer sk_nen_..." \
  -H "Content-Type: application/pdf" \
  --data-binary @./report.pdf \
  "https://desktop.api.getnen.ai/desktops/dsk_abc123def456/files/report.pdf"
{"success":true,"size":102400,"filename":"report.pdf"}
To upload into a subdirectory, pass ?path=<subdir>:
curl -X POST -H "Authorization: Bearer sk_nen_..." \
  -H "Content-Type: application/pdf" \
  --data-binary @./report.pdf \
  "https://desktop.api.getnen.ai/desktops/dsk_abc123def456/files/report.pdf?path=Documents"

Download a File

nen desktop files download dsk_abc123def456 report.pdf
By default writes to ./<name>; pass --output <path> (or -o - for stdout), or --force to overwrite. Pass --path <subdir> to download from a subdirectory.

API

curl -H "Authorization: Bearer sk_nen_..." \
  -o report.pdf \
  "https://desktop.api.getnen.ai/desktops/dsk_abc123def456/files/report.pdf"
To download from a subdirectory, pass ?path=<subdir>:
curl -H "Authorization: Bearer sk_nen_..." \
  -o report.pdf \
  "https://desktop.api.getnen.ai/desktops/dsk_abc123def456/files/report.pdf?path=Documents"

Lifecycle

The drive is created the first time you connect to the desktop and deleted when the desktop is destroyed.
Files are scoped to the desktop’s lifetime, not to your session. They survive any disconnect or reconnect to the same desktop. They do not survive nen desktop delete (or DELETE /desktops/{id}), which wipes the drive along with the desktop.

Limits

  • Uploads are capped at 100 MiB per file (server-enforced).
  • Listings are single-level — pass --path <subdir> (or ?path=<subdir> on the API) to descend into a subdirectory.
  • Upload and download names cannot contain path separators (/, \) or .. — write into a subdirectory by creating it from inside the desktop and using --path on subsequent listings.
  • Files persist across controller task replacements on the warm pool.

Next Steps

Manage Desktops

List, inspect, and delete cloud desktops

Desktop SDKs

upload_file / download_file / list_files in Python, JS, and Go