Skip to main content
A sandbox can mount Tensorlake filesystems as ordinary directories. The sandbox’s root disk is ephemeral; a mounted filesystem is durable, survives the sandbox, and can be shared by many sandboxes at once. Reads stream in lazily, so mounting is fast regardless of how much the filesystem holds, and writes replicate to durable storage automatically through autosave. You mount a filesystem by the name you created it with:
That name (data) is the file_system_id everywhere in the sandbox API.

Mount at Creation

Pass one or more mounts when creating the sandbox. The mounts are ready before the sandbox is reported as running.
-f/--filesystem takes <name>:<mount-path>[:<opts>] and can be repeated. <opts> is a comma-separated list of ro (read-only) and/or prefetch:
Create the filesystem first (tl fs create <name>). Mounting a name that does not exist fails the sandbox — see Errors.

Mount rules

Mount Options

Both options are per mount and default to off.

Read-only

read_only mounts the filesystem read-only. Writes inside the guest fail with EROFS. Enforcement is defense-in-depth: the storage credential minted for the mount carries no write scope, the host proxy filters writes, and the guest mount itself is read-only. Read-only is fail-closed: the sandbox is only placed on executor fleets that can enforce it, so a read_only mount can never silently degrade to read-write. On fleets that have not yet been updated, a sandbox requesting a read-only mount will not be placed.

Prefetch

prefetch downloads the filesystem’s full tree in the background after the mount is ready. The mount is usable immediately — reads stream in lazily in the meantime — and once the prefetch completes, reads no longer touch the network. Prefetch is best-effort: it never blocks mount readiness and never fails the sandbox. On older fleets it is skipped silently.
Both options require the latest SDK/CLI and up-to-date executor fleets.

Mount on a Warm-Pool Claim

Pools keep containers pre-booted without filesystems; mounts belong to the claim, not the pool. Pass the same file_systems when claiming, and the mounts are ready before the claimed sandbox is reported as running.

Attach and Detach at Runtime

A running sandbox can attach and detach filesystems without restarting.
Runtime attach is fail-closed: if an attached mount later cannot converge — most commonly because the filesystem does not exist — the whole sandbox is terminated, with the reason and an actionable error_details message on the sandbox object. Verify the filesystem exists (tl fs ls) before attaching to a sandbox whose state you care about, or mount at creation time instead, where the same mistake fails only the create.
Two other runtime-attach responses to know about:
  • 400 — the sandbox runs on an executor fleet without filesystem support. Recreate the sandbox to mount filesystems.
  • 409 — the mount path is already in use, the sandbox is not running, or the sandbox’s executor is momentarily unresolvable (for example during a reconnect window). The last case is transient: retry shortly.

Errors

Mounting a filesystem that does not exist fails sandbox creation with HTTP 422:
The sandbox object records the same reason with a message telling you exactly what to do:
Create the filesystem first, then create the sandbox:

Sharing Across Sandboxes

The same filesystem can be mounted by multiple sandboxes in one project concurrently. Writes from one sandbox become visible to the others as autosave checkpoints replicate — see Concurrent Writes for the merge semantics and Distribute Files for rolling out shared assets to a fleet of sandboxes with read-only mounts.

Filesystems

Durable, versioned filesystems: create, push, snapshot, and time-travel.

Read-only Mounts

Pinned and following mounts for fixed inputs and shared assets.

Sandbox Pools

Pre-warm sandboxes and mount filesystems at claim time.

File Operations

Copy, read, and write files on the sandbox’s ephemeral root disk.