Project files
A file (file_…) belongs to a project. Upload it once (up to 1 GiB, streamed) and mount it into any number of sessions. Mounting never copies the bytes.
BMA extensions on files:
Idempotency-Key on upload, X-BMA-File-Metadata (up to 16 string labels) with metadata=key:value filters, and a sha256 digest (X-BMA-File-Digest on downloads). A project may hold up to 100 GiB of files by default.
Inside the machine
Files under
outputs belong to the session and survive machine pause, rebuild and deletion. Writing the same path again creates a new version; every version stays readable by id.
How the mounts behave:
- Read on demand. Nothing is copied before a command starts. Files added to or removed from the session show up in about a second.
- Inputs are read-only. Writing under
uploadsorskillsfails withRead-only file system; write results tooutputs. - Skills are already there. The
skilltool returns the instructions and the directory under/mnt/skills; it installs nothing on machines that mount it. - No storage credentials on the machine. The mounts use a short-lived token scoped to the session and held in memory; it is renewed automatically, including in sessions that run for hours.
- Failures recover by themselves. If the mount process crashes, the mount is restored in about a second without restarting the machine. It is also restored after a network drop, a pause and resume, or a server failover. While a file cannot be reached, reads fail with an error instead of returning stale or empty data.
- Fallback. Machines that cannot mount (your own executors, macOS and Windows) get the same paths filled by copying files in before commands start, and
outputsis scanned and uploaded.
Session files (BMA extension)
For apps that want to hand a file to one session without managing project files, the/v1 API adds:
POST /v1/sessions/{id}/files(multipartfile): upload to the sessionGET /v1/sessions/{id}/files?limit=&page=: what was uploaded, what the agent produced (source:upload,agent,memory)GET /v1/sessions/{id}/files/{file_id}/content: download, withX-BMA-File-Digest
path you can give the agent verbatim. Call them with the generic request methods of the official SDKs or plain HTTP.