Overview
TheStorageClient is the Room API for room-scoped files and folders. Use it to store shared inputs, outputs, artifacts, and attachments that humans, agents, and services in the same room need to read or write.
Why use the Storage API?
- Share files between people, agents, and deployed services without wiring separate object storage access.
- Store outputs such as reports, logs, generated media, or intermediate artifacts.
- Download file contents directly or get a downloadable URL when you need to hand a file to another system.
How it works
Paths are relative to the room storage root. Opening a file returns a handle; writes become visible when you close that handle. The API also emitsfile.updated and file.deleted events so other participants can react to changes.
Current implementation note: the repo includes both local filesystem and GCS-backed storage providers. Deployed services can also mount room storage into the filesystem. The Room Storage API is the stable contract; bucket-mount details belong to service/runtime docs rather than the core API contract.
Permissions and grants
open/write/close and download/download_url require a storage grant on the participant token for the target path. Storage grants are path-based, which lets you give a service access to only part of room storage. In the current server implementation, list, exists, stat, and delete are not gated by storage grants.
CLI and SDK availability
- CLI: file operations are available under
meshagent room storage .... - Python, JavaScript/TypeScript, Dart, and .NET: helper methods are shown below.
Events
The storage system emits two types of events:file.updated
Triggered when a file is created or updated. Python and .NET handlers receivepathandparticipant_id. JS/TS and Dart handlers receive aFileUpdatedEventwith.path.
file.deleted
Triggered when a file is deleted. Python and .NET handlers receivepathandparticipant_id. JS/TS and Dart handlers receive aFileDeletedEventwith.path.
API Methods
Below is a summary of the primary methods. Each method is asynchronous, so you shouldawait the call.
exists(path)
DescriptionChecks if a file or folder exists at the given path. Parameters
path(str): The path to check.
- (bool):
Trueif the file or folder exists;Falseotherwise.
stat(path)
DescriptionFetch basic metadata (exists, folder flag, created/updated timestamps) for a file or folder. Parameters
path(str): The path to inspect.
StorageEntry | None: Entry when present;Noneif not found.
name, is_folder, created_at, and updated_at fields. SDKs that expose stat parse timestamps into native datetime types.
Example:
- Availability: Python SDK exposes
stat; other SDKs can call the same endpoint via a custom request until a helper is added.
open(path, overwrite=False)
DescriptionOpens a file for writing. Returns a handle used for subsequent write calls and closing.
If
overwrite is True, an existing file at this path will be truncated. Current storage providers truncate on open regardless of overwrite, so check exists or stat before opening if you need to guard against overwrites.
Parameters
path(str): The file path to open or create.overwrite(bool, optional): Whether to overwrite if the file already exists. Defaults toFalse.
- Handle Object: An object representing an open file, usable with
writeandclose.
write(handle, data)
DescriptionWrites binary data to an open file handle. You can call
write multiple times to stream chunks before closing.
Parameters
handle(file handle): The handle returned byopen.data(bytes): The data to write.
None
close(handle)
DescriptionCloses an open file handle, ensuring all data has been written. A
file.updated event is emitted on close.
Parameters
handle(file handle): The handle to close.
None
download(path)
DescriptionRetrieves the content of a file from the remote storage. This loads the entire file into memory; use
download_url for large files or streaming.
Parameters
path(str): The file path to download.
- File-like Response: Contains the file’s raw data, typically accessible through a
.dataproperty.
download_url(path)
DescriptionRequests a downloadable URL for the specified file path, which can be used to fetch the file directly (e.g., via HTTP). The exact protocol or format of the returned URL may vary, and may be a signed URL if the backing storage provider supports it. Parameters
path(str): The file path to retrieve a download URL for.
- (str): A URL string you can fetch with your own HTTP or other suitable client.
list(path)
DescriptionLists the contents of a folder, returning file and subfolder names along with a flag indicating if each entry is a folder. The server also returns
created_at and updated_at timestamps; the Python SDK exposes them on StorageEntry.
Parameters
path(str): The folder path to list.
- (list): A list of entries, each containing a
nameandis_folderproperty. Timestamps are available in SDKs that surface them.
delete(path)
DescriptionDeletes a file or folder at the given path. A
file.deleted event is typically emitted afterward. To delete a folder, pass recursive=True (Python) or call the raw storage.delete request with the recursive flag.
Parameters
path(str): The file path to delete.recursive(bool, optional): SetTrueto delete folders recursively (Python helper or raw request).
None
Example Workflow
A common use case:- Check if a file exists.
- Create and write data if it doesn’t exist.
- Later, download the file to verify or use the data.
- Delete the file when it’s no longer needed, reacting to the
file.deletedevent.