--- title: Files description: Upload and manage files owned by an Environment or Persona. --- # Files Use `environments files` or `personas files`. The first argument is the owning Environment or Persona (ID, short ID or exact name). File arguments are stable UUIDs. `--project` selects the project; otherwise the current profile's default project is used. ```bash smoketest environments files list Staging smoketest environments files upload Staging ./invoice.pdf --name "Sample invoice" --description "Invoice import fixture" smoketest environments files get Staging FILE_UUID smoketest environments files edit Staging FILE_UUID --name "Invoice with discount" smoketest environments files replace Staging FILE_UUID ./revised-invoice.pdf smoketest environments files download Staging FILE_UUID --output ./downloaded.pdf smoketest environments files delete Staging FILE_UUID --yes smoketest personas files upload Buyer ./avatar.png smoketest personas files list Buyer --project Checkout --json ``` All seven commands are available under both owner types. Upload and replace calculate SHA-256 locally, upload directly to private temporary storage, and publish only after verification. MIME type is inferred from common extensions; `--mime-type` overrides it. Files must be regular files of at most 25 MiB. Downloads require an explicit `--output`; existing destinations require `--force` to overwrite. Noninteractive deletion requires `--yes`. Commands return JSON metadata without temporary storage URLs. Read operations require a `read` API scope and mutations require `write`, intersected with current project permissions. Replacing preserves the file UUID. Reference that UUID in Test Markdown using `[label](smoketest-file:UUID)`, or use the web editor's picker. See [files in Tests](/writing-tests/files) for scope, previews and retention.