aeroftp-cli
Select a command on the left to see its arguments, options and runnable examples. Press ⌘K to search.
Select a command on the left to see its arguments, options and runnable examples. Press ⌘K to search.
CLI version: 4.1.8 · 94 commands. Machine-readable JSON: https://www.aeroftp.app/assets/cli-explorer/cli-spec.json
Categories: safe
Summary: Show detailed server info, account, and storage quota
Description: Show detailed server info, account, and storage quota
Syntax: aeroftp-cli about [OPTIONS] [URL]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Server and account info
aeroftp-cli about --profile ftps-prodServer: ftps.example.com Protocol: FTPS (explicit, TLS 1.3) Account: aeroftp@aeroftp.app Quota: 1.8 / 5.0 GB Features: RESUME, MLST, UTF-8, EPSV Latency: 42 ms (RTT to server)
Categories: modify
Summary: Set OpenDrive privacy of an existing file/folder (#252)
Description: Issue #252: set the privacy level of an EXISTING file or folder on providers that model access (OpenDrive). The CLI counterpart of the GUI Properties > Permissions tab; file-vs-folder is detected via `stat`
Syntax: aeroftp-cli access --profile NAME /path --to public|private|hidden
--to : Privacy level to set: private, public, or hidden Possible values: - private: Not listed, not shared; reachable only by the owner - public: Anyone with the link can access; searchable - hidden: Accessible by direct link only; not searchable-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `access` (offline help)
aeroftp-cli help accessIssue #252: set the privacy level of an EXISTING file or folder on providers that model access (OpenDrive). The CLI counterpart of the GUI Properties > Permissions tab; file-vs-folder is detected via `stat`
Usage: aeroftp-cli access [OPTIONS] --to <TO> [URL] [PATH]
Arguments:
[URL]
Server URL (omit when using --profile)
[PATH]
Remote path of the file or folder
[default: ""]
Options:
--to <TO>
Privacy level to set: private, public, or hidden
Possible values:
- private: Not listed, not shared; reachable only by the owner
- public: Anyone with the link can access; searchable
- hidden: Accessible by direct link only; not searchable
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: advanced
Summary: AeroCloud folder sync: configure and run the always-on cloud folder from the CLI.
Description: AeroCloud folder sync: configure and run the always-on cloud folder from the CLI.
Syntax: aeroftp-cli aerocloud [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `aerocloud` (offline help)
aeroftp-cli help aerocloudAeroCloud folder sync: configure and run the always-on cloud folder from the CLI.
AeroCloud keeps one local folder mirrored with a remote folder on a saved profile (like Dropbox/Drive). The GUI configures it and a background worker runs it on a schedule; these subcommands expose the same config plus a one-shot `sync` so it is scriptable and headless-testable. `sync` needs the vault open (see `--master-password` / AEROFTP_MASTER_PASSWORD).
Usage: aeroftp-cli aerocloud [OPTIONS] <COMMAND>
Commands:
show Print the current AeroCloud configuration (folders, profile, direction, interval, enabled, versioning, last sync)
set Mutate the AeroCloud configuration. Only the flags you pass are changed; everything else is preserved. Writes the config to disk on success
enable Enable AeroCloud (sets enabled=true and saves)
disable Disable AeroCloud (sets enabled=false and saves)
status Synthetic, machine-friendly status: enabled, last sync, folder pair, direction
sync Run one synchronization cycle now (the same path the background worker uses). Requires the vault open and AeroCloud enabled
pair Subcommands for multiple AeroCloud pairs (cloud_pairs.json store). Each pair is independent (own profile, direction, excludes)
help Print this message or the help of the given subcommand(s)
Options:
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: modify
Summary: AeroRsync delta engine: configuration and live diagnostics
Description: AeroRsync delta engine: configuration and live diagnostics
Syntax: aeroftp-cli aerorsync [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Probe the aerorsync delta engine
aeroftp-cli aerorsync probe --profile sftp-prodMode: auto (will pick native if both ends support rsync >=3.2) Probe: SSH endpoint OK, rsync 3.2.7 detected on remote Result: NATIVE rsync available (Z.4.5 R1 transport) Use: aeroftp-cli sync --profile sftp-prod ... will accelerate
Categories: advanced
Summary: AeroAgent - AI-powered interactive agent with tool execution
Description: AeroAgent - AI-powered interactive agent with tool execution
Syntax: aeroftp-cli agent [OPTIONS]
-m, --message : One-shot message (run and exit)-p, --provider : AI provider (anthropic, openai, gemini, ollama, etc.)--model : Model override-c, --connect : Pre-connect to server on startup--auto-approve : Auto-approve tool calls: safe, medium, high, all (default: safe)--max-steps : Max autonomous steps (default: 10) (default: 10)--orchestrate: Orchestration mode (JSON-RPC 2.0 over stdin/stdout)--mcp: MCP server mode (Model Context Protocol)--stdin: Read message from stdin-y, --yes: Auto-approve all tools (equivalent to --auto-approve all)--plan-only: Plan only - show execution plan without running--cost-limit : Cost limit in USD (stop when exceeded)--system : Custom system prompt (or @file.txt to load from file)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Start the agent surface (MCP stdio)
aeroftp-cli agent --mcpAeroFTP agent v3.8.5 ready Transport: stdio (JSON-RPC 2.0, MCP) Tools: 39 exposed (read 21, write 14, system 4) Waiting for client...
Categories: advanced
Summary: Show the canonical task-oriented quick-start for AI agents
Description: Show the canonical task-oriented quick-start for AI agents
Syntax: aeroftp-cli agent-bootstrap [OPTIONS]
--task : Optional task focus for tailored commands [possible values: explore, verify-file, transfer, backup, reconcile]--path : Remote path or working path for the task--pattern : Optional filename or glob pattern--source-profile : Source profile for transfer/backup flows--dest-profile : Destination profile for transfer/backup flows--source-path : Source remote path for transfer/backup flows--dest-path : Destination remote path for transfer/backup flows--local-path : Local path for local-vs-remote verification flows--remote-path : Remote path for local-vs-remote verification flows-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Canonical task workflows for AI agents
aeroftp-cli agent-bootstrap --json{
"intent_examples": [
{"goal":"upload site","workflow":["connect","sync-doctor","sync"]},
{"goal":"clone bucket","workflow":["transfer-doctor","transfer"]},
{"goal":"recover space","workflow":["ncdu","cleanup","dedupe"]}
]
}
Categories: advanced
Summary: Single-shot connect surface for agents: returns per-block status (connect/capabilities/quota/path) in one JSON call. Replaces the boilerplate `connect → about → df → ls /` sequence.
Description: Single-shot connect surface for agents: returns per-block status (connect/capabilities/quota/path) in one JSON call. Replaces the boilerplate `connect → about → df → ls /` sequence.
Syntax: aeroftp-cli agent-connect [OPTIONS] <PROFILE>
--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Open an ad-hoc connection for the agent
aeroftp-cli agent-connect sftp://ci@build.example.com:/srv/staging --json{
"session_id": "s_8c1d4e",
"protocol": "sftp",
"host": "build.example.com",
"ttl_s": 900,
"tools": ["ls","get","put","sync","rm"]
}
Categories: advanced
Summary: Show machine-readable CLI capabilities
Description: Show CLI capabilities for AI agent discovery (always JSON)
Syntax: aeroftp-cli agent-info --json
--redact-identifiers: Redact per-profile host and username identifiers (PRIV-01). Use when a large agent context only needs tool discovery, not account metadata; the full identifiers stay available via `profiles --json`-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Machine-readable capability discovery
aeroftp-cli agent-info --json{
"version": "3.8.5",
"capabilities": {
"agent_native_tools": 39,
"main_command_groups": 38
},
"commands": { "safe": [...], "modify": [...], ... }
}
Categories: advanced
Summary: List configured AI providers and models from the encrypted vault
Description: List configured AI providers and models from the encrypted vault
Syntax: aeroftp-cli ai-models [OPTIONS]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List AI models known to the agent layer
aeroftp-cli ai-modelsNAME VENDOR CTX ROLE claude-opus-4-7 anthropic 200K planner claude-sonnet-4-6 anthropic 200K actor claude-haiku-4-5 anthropic 200K fast-paths gpt-5o openai 128K fallback 4 models registered
Categories: modify
Summary: Manage CLI aliases stored in config.toml
Description: Manage CLI aliases stored in config.toml
Syntax: aeroftp-cli alias [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List CLI aliases
aeroftp-cli alias listALIAS EXPANDS TO prod --profile ftps-prod backup --profile hetzner-backup deploy sync --profile ftps-prod ./_site/ /srv/site/ 3 aliases defined
Categories: modify
Summary: Toggle an opt-in shell alias (default: aero) on or off
Description: Toggle an opt-in shell alias (default: aero) on or off
Syntax: aeroftp-cli alias-toggle [OPTIONS] [NAME]
--bin-dir : Override the target directory (default: ~/.local/bin on Unix, %LOCALAPPDATA%\AeroFTP\bin on Windows)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Enable or disable an alias
aeroftp-cli alias-toggle deploy --offAlias 'deploy' is now DISABLED (kept in config) Re-enable with: aeroftp-cli alias-toggle deploy --on
Categories: advanced
Summary: Plaintext archive operations for `.aerozip` (application/x-aerozip).
Description: Plaintext archive operations for `.aerozip` (application/x-aerozip).
Syntax: aeroftp-cli archive [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `archive` (offline help)
aeroftp-cli help archivePlaintext archive operations for `.aerozip` (application/x-aerozip).
Creates, extracts, and lists passwordless archives backed by the aerovz lane: compression + integrity + Reed-Solomon recovery, not confidentiality.
Usage: aeroftp-cli archive [OPTIONS] <COMMAND>
Commands:
create Create an unencrypted `.aerozip` archive (application/x-aerozip)
extract Extract an unencrypted `.aerozip` archive
list List entries in an unencrypted `.aerozip` archive
help Print this message or the help of the given subcommand(s)
Options:
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: safe
Summary: Run autonomous server audits across saved profiles (M3)
Description: Run autonomous server audits across saved profiles (M3)
Syntax: aeroftp-cli audit [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Audit recent agent operations
aeroftp-cli audit --since 24hWHEN ACTOR ACTION TARGET 2026-05-27 09:14:02 agent:claude sync /srv/site 2026-05-27 10:02:18 user:alex profile-add staging 2026-05-27 10:44:51 agent:claude transfer /srv -> /backups 3 entries in last 24h
Categories: advanced
Summary: Run batch automation scripts
Description: Execute commands from a batch script (.aeroftp-script file). The `.aeroftp` extension is reserved for profile-export backups and is rejected here with a rename hint (issue #225)
Syntax: aeroftp-cli batch file.aeroftp-script
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Run a batch automation script
aeroftp-cli batch ./deploy.aeroftpLoaded ./deploy.aeroftp (12 steps) [1/12] connect ftps-prod OK [2/12] sync ./_site /srv/site OK (52 added, 14 updated) [3/12] hashsum /srv/site/... OK ... [12/12] notify slack OK Batch finished in 24.1s
Categories: safe
Summary: Run a community-driven benchmark across upload/download/list/stat operations. Output is sanitized: no hostnames, paths, credentials, or bucket names are recorded. Schema v1 contract in `docs/dev/roadm
Description: Run a community-driven benchmark across upload/download/list/stat operations. Output is sanitized: no hostnames, paths, credentials, or bucket names are recorded. Schema v1 contract in `docs/dev/roadmap/APPENDIX-BENCHMARK/01_JSON-Schema-v1.md`
Syntax: aeroftp-cli benchmark [OPTIONS] [LEVEL]
--sizes : Override single-file sweep sizes (comma-separated). A bare number is MEBIBYTES (e.g. "1,100,1024"); K/M/G suffixes are explicit (e.g. "1M,100M,1G")--runs : Override timed runs per (operation, size) tuple--operations : Comma-separated operations: upload,download,list,stat,delete--consent-publish: Append anonymized environment metadata and print a paste-ready Issue block--anonymize-extra: Hash provider hint as well (extra anonymization)--report : Write the JSON report to a file--profile-timeout : Total benchmark timeout in seconds (default 3600). Bumps the cap for slow cold storage (idrive S3, InfiniCloud) so 1G transfers can finish without aborting mid-sweep--test-root-prefix : Custom remote prefix for the scratch tree (default: provider initial path joined with `aeroftp-bench`). Use this to redirect the bench payloads under a writable sub-path on providers that refuse operations on `/` (kDrive, SeaFile WebDAV)--pre-delete: Delete the remote payload between successive upload runs of the same size. Workaround for strict providers (4shared and several WebDAV servers) that reject overwrite-on-PUT--file-count : Many-small-files workload: number of files to exercise (e.g. 100, 1000). When > 0, runs a dedicated small-files benchmark on a separate axis (upload-all / download-all / list-dir / stat-all / delete-all) reporting files/sec and mean per-file time. This is the workload where per-file overhead (handshake, signing, metadata round-trips) dominates and S3 typically pulls ahead of WebDAV and FTP. On its own it replaces the single-file size sweep; add explicit --sizes to run both axes together--file-size : Size of each file in the many-small-files workload. A bare number is MEBIBYTES (e.g. 1 = 1 MiB, matching how chunk sizes are discussed); K/M/G suffixes are explicit (e.g. 64K, 4M). Defaults to 64K. Total payload (file-count x file-size) is capped at 5 GiB (default: 64K)--compare : Compare several saved profiles in one run: comma or space separated selectors (names, indices or ids, e.g. "S3 Blackblaze,S3 Storj"). Each profile runs the same workload, then the CLI prints a combined comparison table. Without this flag, benchmark runs the single profile from the global --profile-i, --interactive: Interactively type the profiles to compare: prints a numbered list of saved servers, then reads names and/or index numbers (space separated) from a prompt. Reuses the current benchmark options (level, --file-count, ...). For a full-screen checklist use --tui instead. Requires an interactive terminal--tui: Pick the profiles to compare from a full-screen checklist (tick the servers with Space/v, navigate with arrows or Tab, run with Enter). Reuses the current benchmark options (level, --file-count, ...). For inline name/index typing use -i instead. Requires an interactive terminal--group : Benchmark the members of one or more groups (the My Servers group chips). Repeatable and comma-aware: `--group A --group B` or `--group A,B`. Without -i/--tui every member of the named groups is benchmarked; with -i/--tui the picker is restricted to those members. Group membership is the same `config_server_groups` blob the GUI uses--all: Benchmark every saved profile (Ehud #277): the opt-in "all available" selection, so you never have to list them with --compare or tick them with -i/--tui. Combine with --group to run all members of those groups, or with -i/--tui to pre-tick the whole list. Profiles that fail to connect are reported as skipped, not fatal. `--all-profiles` is an accepted spelling: it pairs read-for-read with `--all-protocols`, and the two combine to benchmark every profile over every transport mode its provider offers.--all-protocols: Expand every selected profile into one run per transport mode of its provider (Ehud #277): a Koofr profile is benchmarked over both its REST API and its WebDAV surface, giving one comparison row and one mini table per mode, exactly as if you had saved a profile for each. Combines with --all, --compare, --group and the pickers. Modes whose credentials or endpoint cannot be resolved are reported as skipped, never measured as zero. Multi-mode providers: Koofr, OpenDrive, FileLu, Filen-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Full benchmark suite
aeroftp-cli benchmark --profile ftps-prod --duration 60sPhase 1/4: tiny files (1 KB x 1000) ... 87 ops/s Phase 2/4: medium (1 MB x 32) ... 9.4 MB/s Phase 3/4: large (64 MB x 2) ... 12.1 MB/s Phase 4/4: list+stat sweep (5000 obj) ... 412 obj/s Score: 6.8 / 10 (FTPS, residential uplink)
Categories: safe
Summary: Print file to stdout
Description: Print remote file to stdout (for piping)
Syntax: aeroftp-cli cat --profile NAME /path/file
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Print a remote text file to stdout
aeroftp-cli cat --profile ftps-prod /srv/site/robots.txtUser-agent: * Allow: / Sitemap: https://example.com/sitemap.xml
Categories: advanced
Summary: Browse the supported provider catalog (companies, protocols, free tier, regions)
Description: Browse the supported provider catalog (companies, protocols, free tier, regions)
Syntax: aeroftp-cli catalog [OPTIONS] [QUERY]
--category : Filter to one category: protocols, object-storage, webdav, cloud-storage, media-services, developer (aliases: s3, object, cloud, media, dev)--free: Show only companies with a free tier (at least one free method)--paid: Show only paid-only companies (no free connection method)--protocols: Expand to one row per connection method instead of per company-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `catalog` (offline help)
aeroftp-cli help catalogBrowse the supported provider catalog (companies, protocols, free tier, regions)
Mirrors the GUI "Add Service" list view, generated from the same `providerCatalog.ts` single source of truth (embedded as `cli_catalog.json`, regenerated by `npm run gen:cli-catalog`). Purely local: no vault, no network. Use `--json` for the full structured data.
Usage: aeroftp-cli catalog [OPTIONS] [QUERY]
Arguments:
[QUERY]
Case-insensitive search over company, country, regions, protocol labels, provider ids and free-tier notes
Options:
--category <CATEGORY>
Filter to one category: protocols, object-storage, webdav, cloud-storage, media-services, developer (aliases: s3, object, cloud, media, dev)
--free
Show only companies with a free tier (at least one free method)
--paid
Show only paid-only companies (no free connection method)
--protocols
Expand to one row per connection method instead of per company
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: advanced
Summary: Compare local and remote trees
Description: Verify local and remote directories are identical
Syntax: aeroftp-cli check --profile NAME ./local /remote
--checksum: Use checksums instead of size/mtime--one-way: Only check files present locally-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Verify local and remote trees are identical
aeroftp-cli check --profile ftps-prod ./_site /srv/siteScanning local: ./_site (1248 files, 47 MB) Scanning remote: /srv/site (1248 files, 47 MB) Hash mode: size+mtime (use --hash sha256 for cryptographic) OK - trees identical
Categories: advanced
Summary: Inspect and prune the multipart resume records (transfer checkpoints).
Description: Inspect and prune the multipart resume records (transfer checkpoints).
Syntax: aeroftp-cli checkpoints [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `checkpoints` (offline help)
aeroftp-cli help checkpointsInspect and prune the multipart resume records (transfer checkpoints).
A resumable upload leaves a record so it can restart where it stopped. The TTL scavenger only prunes a record when the SAME endpoint is used again, so a server you stop using keeps its records until the store hits its cap, and the cap evicts terminal residue before resumable transfers. This is the explicit escape for a decommissioned server.
Usage: aeroftp-cli checkpoints [OPTIONS] <COMMAND>
Commands:
list List the endpoints that currently hold resume records
forget Drop every resume record bound to one endpoint
help Print this message or the help of the given subcommand(s)
Options:
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: destructive
Summary: Remove orphaned .aerotmp files from interrupted downloads
Description: Remove orphaned .aerotmp files from interrupted downloads
Syntax: aeroftp-cli cleanup [OPTIONS] [URL] [PATH]
--force: Actually delete orphaned files (default: dry-run listing)--min-age : Only delete .aerotmp files older than this age (e.g. 30m, 2h, 1d). Recent temp files may belong to an in-progress transfer and are kept. Files without a known modification time are never deleted. Default: 1h (default: 1h)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Reclaim trashed / temp data
aeroftp-cli cleanup --profile filen-personal --older-than 30dScanning trash on filen-personal... 42 items eligible (older than 30d, 312 MB) Purging... OK - 312 MB reclaimed in 1.8s
Categories: modify
Summary: Generate shell completions (bash, zsh, fish, elvish, powershell)
Description: Generate shell completions (bash, zsh, fish, elvish, powershell)
Syntax: aeroftp-cli completions [OPTIONS] <SHELL>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Generate bash completions
aeroftp-cli completions bash > ~/.local/share/bash-completion/completions/aeroftp-cli# Wrote 18 KB to /home/user/.local/share/bash-completion/completions/aeroftp-cli # Reload your shell or run: source ~/.bashrc
Categories: advanced
Summary: Compress files/folders into an archive (zip, 7z, tar, tar.gz, tar.xz, tar.bz2, gz, xz, bz2).
Description: Compress files/folders into an archive (zip, 7z, tar, tar.gz, tar.xz, tar.bz2, gz, xz, bz2).
Syntax: aeroftp-cli compress [OPTIONS] <OUTPUT> <PATHS>...
--archive-format : Archive format override (default: infer from the output extension) [possible values: zip, 7z, tar, tar.gz, tar.xz, tar.bz2, gz, xz, bz2, rar]-l, --level : Compression level 0-9 (zip, 7z, tar.gz, tar.xz, tar.bz2; default 5 = 7-Zip "Normal"; 0 = store for zip). 7-Zip presets: 1 Fastest, 3 Fast, 5 Normal, 7 Maximum, 9 Ultra. For 7z it maps onto the LZMA2 preset-p, --password : AES-256 password for zip / 7z (explicit intent to encrypt). For an ambient default applied only to encryptable formats, set AEROFTP_ARCHIVE_PASSWORD--encrypt-names: 7z only: also encrypt the archive header so the filenames are hidden, not just the file contents (7-Zip's "Encrypt file names", -mhe=on). Requires --password and is ignored for other formats. Off by default--method : 7z only: content compression method (default lzma2). lzma is the classic single-stream LZMA; ppmd suits text; bzip2 is block sorting. All are readable by the extractor. Ignored for other formats [possible values: lzma2, lzma, ppmd, bzip2]--dictionary : 7z LZMA2 only: dictionary size in bytes (encoder clamps to 4096..=4 GiB), e.g. 16777216 for 16 MiB. Ignored for other methods/formats--solid: 7z only: pack every file into one solid block (better ratio on many small files, slower random extraction). Off by default--threads : 7z LZMA2 only: compression thread count (1 = single-threaded). Ignored for other methods/formats-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `compress` (offline help)
aeroftp-cli help compressCompress files/folders into an archive (zip, 7z, tar, tar.gz, tar.xz, tar.bz2, gz, xz, bz2).
The format is inferred from the output extension unless `--archive-format` is given. `zip` and `7z` accept an AES-256 `--password`; the tar family is unencrypted. The standalone `gz` / `xz` / `bz2` compress exactly ONE file (single-stream, no tar wrapper): pass a single file, or use tar.gz/tar.xz/tar.bz2 to bundle many. 7z exposes advanced knobs: `--method` (lzma2/lzma/ppmd/bzip2), `--dictionary`, `--threads` (LZMA2), and `--solid`; all are ignored for the other formats. Local-only, no connection. Honors `--json` for scriptable output.
Usage: aeroftp-cli compress [OPTIONS] <OUTPUT> <PATHS>...
Arguments:
<OUTPUT>
Output archive path (format inferred from its extension unless --format)
<PATHS>...
Files and/or folders to add to the archive (one or more)
Options:
--archive-format <ARCHIVE_FORMAT>
Archive format override (default: infer from the output extension)
[possible values: zip, 7z, tar, tar.gz, tar.xz, tar.bz2, gz, xz, bz2, rar]
-l, --level <LEVEL>
Compression level 0-9 (zip, 7z, tar.gz, tar.xz, tar.bz2; default 5 = 7-Zip "Normal"; 0 = store for zip). 7-Zip presets: 1 Fastest, 3 Fast, 5 Normal, 7 Maximum, 9 Ultra. For 7z it maps onto the LZMA2 preset
-p, --password <PASSWORD>
AES-256 password for zip / 7z (explicit intent to encrypt). For an ambient default applied only to encryptable formats, set AEROFTP_ARCHIVE_PASSWORD
--encrypt-names
7z only: also encrypt the archive header so the filenames are hidden, not just the file contents (7-Zip's "Encrypt file names", -mhe=on). Requires --password and is ignored for other formats. Off by default
--method <METHOD>
7z only: content compression method (default lzma2). lzma is the classic single-stream LZMA; ppmd suits text; bzip2 is block sorting. All are readable by the extractor. Ignored for other formats
[possible values: lzma2, lzma, ppmd, bzip2]
--dictionary <DICTIONARY>
7z LZMA2 only: dictionary size in bytes (encoder clamps to 4096..=4 GiB), e.g. 16777216 for 16 MiB. Ignored for other methods/formats
--solid
7z only: pack every file into one solid block (better ratio on many small files, slower random extraction). Off by default
--threads <THREADS>
7z LZMA2 only: compression thread count (1 = single-threaded). Ignored for other methods/formats
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: safe
Summary: Test connection
Description: Test connection to a remote server
Syntax: aeroftp-cli connect --profile NAME
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Test connection to a profile
aeroftp-cli connect --profile ftps-prodResolving profile 'ftps-prod'... OK Connecting to ftps.example.com:21 (FTPS, explicit)... TLS handshake: TLS 1.3, AES-256-GCM Auth: aeroftp@aeroftp.app -> OK Connection healthy (RTT 42 ms)
Categories: advanced
Summary: Error-correct any standalone file with a detached `.aerocorrect` sidecar (par2-style). Generate parity, verify integrity, or repair corruption. The same format protects vault containers and synced fil
Description: Error-correct any standalone file with a detached `.aerocorrect` sidecar (par2-style). Generate parity, verify integrity, or repair corruption. The same format protects vault containers and synced files; binding is by content SHA-256. Windowed streaming keeps memory bounded on large files
Syntax: aeroftp-cli correct [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `correct` (offline help)
aeroftp-cli help correctError-correct any standalone file with a detached `.aerocorrect` sidecar (par2-style). Generate parity, verify integrity, or repair corruption. The same format protects vault containers and synced files; binding is by content SHA-256. Windowed streaming keeps memory bounded on large files
Usage: aeroftp-cli correct [OPTIONS] <COMMAND>
Commands:
gen Generate a `.aerocorrect` recovery sidecar for a file. Default output is `<file>.aerocorrect`. The level sets the storage overhead (low ~7%, medium ~15%, quartile ~25%, high ~30%, or a percentage 5-50; default medium)
verify Verify a file against its `.aerocorrect` sidecar (read-only, never modifies the file). Exit 0 = intact, 1 = corruption detected (repairable with `correct repair`)
repair Repair a corrupted file in place from its `.aerocorrect` sidecar. Atomic and all-or-nothing: the original is replaced only if the repaired stream hashes back to the sidecar's recorded content; otherwise it is left byte-for-byte untouched
help Print this message or the help of the given subcommand(s)
Options:
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: modify
Summary: Server-side copy when supported
Description: Copy a remote file on the server side when supported
Syntax: aeroftp-cli cp --profile NAME /old /new
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Server-side copy (no local hop)
aeroftp-cli cp --profile ftps-prod /docs/report.pdf /archive/2026/report.pdfServer-side COPY supported by ftps-prod Copying /docs/report.pdf -> /archive/2026/report.pdf (245 KB) OK - 0.18s (no local hop)
Categories: advanced
Summary: Use encrypted overlay storage (v4 keyslots: migrate-v4 / list-slots / add-slot / remove-slot / rotate-slot)
Description: Encrypted overlay - zero-knowledge storage on any provider
Syntax: aeroftp-cli crypt <init|bind|unbind|to-headed|to-headerless|migrate-marker|migrate-v4|list-slots|add-slot|remove-slot|rotate-slot|kit-verify|ls|put|get> --profile NAME /path
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Initialize an encrypted overlay
aeroftp-cli crypt init --profile filen-personal /vaultGenerating per-vault keys (XChaCha20-Poly1305)... Encrypting metadata blob and uploading to /vault/.aeroftp-crypt OK - overlay ready. Use `aeroftp-cli crypt put/get/ls --profile filen-personal /vault`.
Categories: safe
Summary: Cryptcheck integrity against encrypted rclone remote
Description: Cryptcheck integrity against encrypted rclone remote
Syntax: aeroftp-cli cryptcheck [OPTIONS] [URL] [LOCAL] [REMOTE]
--password : Password for rclone crypt (can also be passed via AEROFTP_RCLONE_CRYPT_PASSWORD)--password2 : Salt for rclone crypt (can also be passed via AEROFTP_RCLONE_CRYPT_PASSWORD2)--filename-encryption : Filename encryption mode (default: standard)--suffix : Suffix on objects when --filename-encryption=off (rclone default ".bin"; use "none" to disable). Stripped before comparing names--one-way: Only check files present locally--checkfile : Optional checkfile mode (not fully implemented)-a, --algorithm : Hash algorithm to use (sha256 or md5) (default: sha256)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Verify rclone-crypt remote integrity
aeroftp-cli cryptcheck --profile rclone-vault ./local /encryptedDecrypting filenames in /encrypted... Comparing 842 objects (4.1 GB) OK - all 842 files match plaintext on local
Categories: advanced
Summary: Manage the background jobs daemon
Description: Background daemon for persistent mounts, jobs, and watch
Syntax: aeroftp-cli daemon <start|stop|status>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Start the background jobs daemon
aeroftp-cli daemon startSpawning aeroftp daemon in /run/user/1000/aeroftp/ PID 41827 - state file: /run/user/1000/aeroftp/daemon.state OK - daemon listening on unix:///run/user/1000/aeroftp/sock
Categories: advanced
Summary: Resolve duplicate remote files
Description: Find duplicate files on a remote by content hash and optionally remove them
Syntax: aeroftp-cli dedupe --profile NAME /path [--mode MODE]
--mode : Resolution mode: skip, delete, newest, oldest, largest, smallest, rename, interactive, list (default: skip)--dry-run: Preview only (don't delete)--force: Confirm destructive modes (delete/newest/oldest/largest/smallest/rename). Required in non-interactive (non-TTY) runs; in a TTY it skips the prompt--max-delete : Cap on the number of files a destructive mode may delete/rename in one run (absolute N or N%). Defaults to 100 when omitted; raise it to act on more--similarity : Similarity: exact (byte-identical, default, back-compat) or non-identical (perceptual for images, simhash for text/SVG) (default: exact)--distance : Hamming distance threshold override for non-identical mode (raster default 10, text 3)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Resolve duplicate remote files
aeroftp-cli dedupe --profile filen-personal /Photos --mode newestHashing /Photos recursively (sha256)... Found 14 duplicate groups (412 MB redundant) Mode 'newest': keeping the most recently modified copy Removed 23 duplicate files - 412 MB freed
Categories: safe
Summary: Storage quota
Description: Show storage quota/usage
Syntax: aeroftp-cli df --profile NAME [--json]
--scan: Compute "used" by recursively scanning the tree (item 4b). Needed for backends with no quota API (FTP/S3/WebDAV): combined with an API or manual total it yields used/total/%. Never run automatically; this is the explicit opt-in--full: With --scan, scan from the account root instead of the profile's initial path. Slower; may hit the entry cap on large accounts-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Show storage quota
aeroftp-cli df --profile ftps-prodProvider: Aruba Hosting (FTPS) Quota: 5.0 GB Used: 1.8 GB (36%) Free: 3.2 GB Objects: 12 481
Categories: modify
Summary: Replace text in a remote UTF-8 file
Description: Find and replace text in a remote UTF-8 file
Syntax: aeroftp-cli edit --profile NAME /path/file "find" "replace" [--first]
--first: Replace only the first occurrence-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Find & replace inside a remote text file
aeroftp-cli edit --profile ftps-prod /srv/site/version.txt "v3.8.4" "v3.8.5"Fetching /srv/site/version.txt (38 bytes)... Match: 1 occurrence Patched and re-uploaded in 0.22s OK
Categories: modify
Summary: Export saved server profiles to external configuration formats
Description: Export saved server profiles to external configuration formats
Syntax: aeroftp-cli export [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Export the vault as an encrypted bundle
aeroftp-cli export --out ./aeroftp-vault.aeroftp-keystoreSealing 7 profiles + 3 alias entries... Wrote ./aeroftp-vault.aeroftp-keystore (8.4 KB, AES-256-GCM) Restore on another machine: `aeroftp-cli keystore restore ./aeroftp-vault.aeroftp-keystore`
Categories: advanced
Summary: Extract an archive (zip, 7z, tar, tar.gz, tar.xz, tar.bz2, gz, xz, bz2, rar).
Description: Extract an archive (zip, 7z, tar, tar.gz, tar.xz, tar.bz2, gz, xz, bz2, rar).
Syntax: aeroftp-cli extract [OPTIONS] <ARCHIVE> [OUTDIR]
--archive-format : Archive format override (default: infer from the archive extension) [possible values: zip, 7z, tar, tar.gz, tar.xz, tar.bz2, gz, xz, bz2, rar]-p, --password : Password for encrypted zip / 7z. Also read from AEROFTP_ARCHIVE_PASSWORD--subfolder: Extract into a subfolder named after the archive-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `extract` (offline help)
aeroftp-cli help extractExtract an archive (zip, 7z, tar, tar.gz, tar.xz, tar.bz2, gz, xz, bz2, rar).
The format is inferred from the archive extension unless `--archive-format` is given. `--password` unlocks encrypted zip / 7z (also AEROFTP_ARCHIVE_PASSWORD). Local-only, no connection. Honors `--json`.
Usage: aeroftp-cli extract [OPTIONS] <ARCHIVE> [OUTDIR]
Arguments:
<ARCHIVE>
Archive path (format inferred from its extension unless --format)
[OUTDIR]
Output directory (default: current directory)
[default: .]
Options:
--archive-format <ARCHIVE_FORMAT>
Archive format override (default: infer from the archive extension)
[possible values: zip, 7z, tar, tar.gz, tar.xz, tar.bz2, gz, xz, bz2, rar]
-p, --password <PASSWORD>
Password for encrypted zip / 7z. Also read from AEROFTP_ARCHIVE_PASSWORD
[env: AEROFTP_ARCHIVE_PASSWORD]
--subfolder
Extract into a subfolder named after the archive
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: safe
Summary: Search files
Description: Search for files by pattern
Syntax: aeroftp-cli find --profile NAME /path/ "*.ext" [--json]
--name : Glob pattern alias for the positional argument. When both the positional pattern and `--name` are set, `--name` wins--files-only: Match only files (skip directories)--dirs-only: Match only directories (skip files)--limit : Cap matches returned. JSON output sets `summary.truncated: true` when this trims results-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Find files by pattern
aeroftp-cli find --profile ftps-prod /srv/ --name "*.log"/srv/logs/access.log /srv/logs/error.log /srv/cache/build.log 3 matches in 0.81s
Categories: advanced
Summary: Import a native install's configuration into this Flatpak sandbox.
Description: Import a native install's configuration into this Flatpak sandbox.
Syntax: aeroftp-cli flatpak-import [OPTIONS]
--status: Only report whether an import is available; do not apply it-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `flatpak-import` (offline help)
aeroftp-cli help flatpak-importImport a native install's configuration into this Flatpak sandbox.
A Flatpak install keeps its own sandboxed config, so it does not see the servers and encrypted vault of a native (.deb/.rpm/AppImage) install. Run inside a Flatpak with a native `~/.config/aeroftp` present, this copies it into the sandbox (copy-only, never overwriting). Outside a Flatpak it is a no-op. Restart AeroFTP afterwards to load the import.
Usage: aeroftp-cli flatpak-import [OPTIONS]
Options:
--status
Only report whether an import is available; do not apply it
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: safe
Summary: Download file
Description: Download file(s) from remote server
Syntax: aeroftp-cli get --profile NAME /remote/file [./local]
-r, --recursive: Recursive download (directories)--segments : Segmented parallel download: split file into N chunks (2-16, default: 1 = off) (default: 1)--delta: Z.4.5 R1: route the download through `AerorsyncDeltaTransport` when the provider exposes one (SFTP today). Auto-falls back to the classic transfer when the transport is not delta-eligible (file too small, missing host-key pin, password auth without dispatch wire-up, etc.). No-op for non-SFTP providers and for recursive / glob downloads-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Download a file
aeroftp-cli get --profile ftps-prod /docs/report.pdf ./Downloading /docs/report.pdf (245 KB) [#####################] 100% 245 KB / 245 KB 412 KB/s OK - saved to ./report.pdf in 0.6s
Categories: advanced
Summary: List and manage server-profile groups (the My Servers group chips)
Description: List and manage server-profile groups (the My Servers group chips)
Syntax: aeroftp-cli groups [OPTIONS]
-i, --interactive: Drop into an interactive prompt after the table (rclone-config-style): re-index(#), Rename(R), Copy(C), Delete(D), List(L). Requires a TTY; ignored in JSON / non-interactive mode--tui: Open the inline action menu (TUI) directly, skipping the `-i` line prompt (Ehud #311). Implies interactive and needs a TTY; equivalent to running `-i` and immediately typing `tui`. Quitting the menu exits-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `groups` (offline help)
aeroftp-cli help groupsList and manage server-profile groups (the My Servers group chips)
Groups are flat, named labels on saved server profiles, the CLI analogue of the GUI group chips. Membership lives in the vault under `config_server_groups`, shared with the GUI, so changes round-trip both ways. Mirrors `aeroftp-cli profiles`: a plain listing, or `-i` for an interactive prompt (rename / copy / delete / re-index). Per Ehud #311.
Usage: aeroftp-cli groups [OPTIONS]
Options:
-i, --interactive
Drop into an interactive prompt after the table (rclone-config-style): re-index(#), Rename(R), Copy(C), Delete(D), List(L). Requires a TTY; ignored in JSON / non-interactive mode
--tui
Open the inline action menu (TUI) directly, skipping the `-i` line prompt (Ehud #311). Implies interactive and needs a TTY; equivalent to running `-i` and immediately typing `tui`. Quitting the menu exits
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: advanced
Summary: Compute remote checksum
Description: Compute hash of remote file(s)
Syntax: aeroftp-cli hashsum --algorithm ALGO --profile NAME /path/file
-a, --algorithm : Hash algorithm (md5/sha1/sha256/sha512/blake3). Defaults to sha256. Accepts `-a sha256` or `--algorithm sha256`. Omitting the flag yields a sha256 checksum Possible values: - md5 - sha1 - sha256 - sha512 - blake3 - quickxor: Microsoft OneDrive proprietary QuickXorHash. Server-side only: it cannot be computed locally, so there is no download fallback - dropbox: Dropbox content_hash (SHA-256 of per-4MiB-block SHA-256). Server-side only: not a plain digest, no local fallback (default: sha256)--download: Download and hash locally-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Compute SHA-256 of a remote file
aeroftp-cli hashsum --algorithm sha256 --profile ftps-prod /docs/report.pdfComputing sha256 of /docs/report.pdf... 9f7c8a3b1d5e2f4a6c8b0d2e4f6a8c0b2d4e6f8a0c2b4d6e8f0a2c4b6d8e0f2c /docs/report.pdf
Categories: advanced
Summary: Read first lines of a remote text file
Description: Print first N lines of a remote file
Syntax: aeroftp-cli head --profile NAME /path/file [-n N]
-n, --lines : Number of lines to print (default: 20) (default: 20)-c, --bytes : Print the first N bytes instead of N lines. Mutually exclusive with --lines (--bytes wins when both present). Useful for "first 4KB" previews on binary or huge files-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')First 5 lines of a remote log
aeroftp-cli head -n 5 --profile ftps-prod /srv/logs/access.log203.0.113.10 - GET / 200 1.2ms 203.0.113.10 - GET /assets/app.css 200 0.8ms 198.51.100.4 - GET /cli 200 4.1ms 198.51.100.4 - GET /cli-explorer.php 200 62.3ms 203.0.113.10 - GET /robots.txt 200 0.4ms
Categories: modify
Summary: Import server profiles from external sources
Description: Import server profiles from external sources
Syntax: aeroftp-cli import [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Import an rclone config
aeroftp-cli import rclone ~/.config/rclone/rclone.confParsed 7 remotes from ~/.config/rclone/rclone.conf Imported: gdrive, dropbox, b2-cold, onedrive, mega, s3-archive, sftp-prod Skipped: 0 Run `aeroftp-cli profiles` to verify.
Categories: advanced
Summary: Print the authoritative inventory of every CLI subcommand and MCP tool
Description: Print the authoritative inventory of every CLI subcommand and MCP tool
Syntax: aeroftp-cli inventory [OPTIONS]
--markdown: Print a human-readable Markdown table instead of JSON--check : Compare live counts against a snapshot JSON file; exit non-zero on drift-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `inventory` (offline help)
aeroftp-cli help inventoryPrint the authoritative inventory of every CLI subcommand and MCP tool
Read straight from the in-code registries (the clap command table, `mcp::tools::tool_definitions`, the CLI agent-tool set), so the counts can never drift from a hand-maintained list. Purely local: no vault, no network. Default output is JSON; `--markdown` prints a human table; `--check FILE` exits non-zero if the live counts differ from a committed snapshot (the CI drift gate).
Usage: aeroftp-cli inventory [OPTIONS]
Options:
--markdown
Print a human-readable Markdown table instead of JSON
--check <FILE>
Compare live counts against a snapshot JSON file; exit non-zero on drift
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: advanced
Summary: Manage queued background jobs
Description: Manage background transfer jobs (requires daemon running)
Syntax: aeroftp-cli jobs <add|list|status|cancel>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List queued background jobs
aeroftp-cli jobs listID STATE COMMAND j_4af2c1 RUNNING sync --profile ftps-prod ./_site /srv/site j_9b1e08 QUEUED transfer ftps-prod hetzner-backup /srv /backups -r j_2c7d44 DONE hashsum --profile ftps-prod /backups/db.tar.gz 3 jobs
Categories: modify
Summary: Encrypted full-state backup of the AeroFTP installation (vault entries, SQLite databases, plugins, sync snapshots, UI preferences). The on-disk format is the same `.aeroftp-keystore` envelope produced
Description: Encrypted full-state backup of the AeroFTP installation (vault entries, SQLite databases, plugins, sync snapshots, UI preferences). The on-disk format is the same `.aeroftp-keystore` envelope produced by the GUI, so files created via the CLI can be imported through Settings > Backup and vice versa
Syntax: aeroftp-cli keystore [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Encrypted backup of the full installation
aeroftp-cli keystore backup --out ./aeroftp-state.aeroftp-keystorePacking vault (7 profiles), SQLite stores (3.1 MB), sync snapshots, UI prefs... Encrypting with master password (XChaCha20-Poly1305)... OK - 4.8 MB written to ./aeroftp-state.aeroftp-keystore
Categories: modify
Summary: Create share link when supported
Description: Create a share link for a remote file when supported
Syntax: aeroftp-cli link --profile NAME /path/file
--expires : Link expiration (e.g. 1h, 24h, 7d, 30d, or seconds)--password : Password-protect the link (provider support required)--permissions : Permission level: view, edit, comment (provider support required) (default: view)--verify: Probe the generated URL with a follow-redirects HTTP GET and report whether it is reachable. Exit code 4 if the probe fails. Useful in CI smoke tests to catch silent regressions where the URL is built but does not actually resolve-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Create a share link
aeroftp-cli link --profile filen-personal /docs/report.pdf --expires 7dProvider 'filen' supports share links Creating link for /docs/report.pdf (expires in 7d)... https://filen.io/d/r-9XZ4kPq1 (read-only, expires 2026-06-03)
Categories: safe
Summary: List directory
Description: List files on a remote server
Syntax: aeroftp-cli ls --profile NAME /path/ [-l] [--json]
-l, --long: Long listing format (permissions, size, date)-s, --sort : Sort by: name, size, date (default: name)-r, --reverse: Reverse sort order-a, --all: Show all files (including hidden)--limit : Cap the number of entries returned (after sort). When the listing is truncated, JSON output sets `summary.truncated: true` so agents can detect partial results--files-only: List only files (skip directories). Applied after sort--dirs-only: List only directories (skip files). Applied after sort-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List a remote directory
aeroftp-cli ls --profile ftps-prod /srv/site/Connected to ftps-prod (ftps://ftps.example.com) drwxr-xr-x - 2026-05-24 14:02 assets/ drwxr-xr-x - 2026-05-24 14:02 front/ drwxr-xr-x - 2026-05-24 14:02 app/ -rw-r--r-- 4.2K 2026-05-26 09:11 index.php -rw-r--r-- 6.8K 2026-05-26 09:11 .htaccess 5 entries in 0.42s
Categories: safe
Summary: List directories only (rclone-style `lsd`)
Description: List directories only (rclone-style `lsd`)
Syntax: aeroftp-cli lsd [OPTIONS] [URL] [PATH]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List directories only
aeroftp-cli lsd --profile ftps-prod /srv/site/assets/ front/ app/ upload/ scripts/ 5 directories
Categories: safe
Summary: Flat machine-parsable listing, one entry per line (rclone-style `lsf`)
Description: Flat machine-parsable listing, one entry per line (rclone-style `lsf`)
Syntax: aeroftp-cli lsf [OPTIONS] [URL] [PATH]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Flat file list (no metadata)
aeroftp-cli lsf --profile ftps-prod /srv/logs/access.log error.log build.log deploy.log
Categories: safe
Summary: Machine-readable JSON listing with a stable record schema
Description: Machine-readable JSON listing with a stable record schema
Syntax: aeroftp-cli lsjson [OPTIONS] [URL] [PATH]
-R, --recursive: Recurse into subdirectories--files-only: List files only--dirs-only: List directories only--stat: Emit a single object describing the path itself, not its contents--no-modtime: Omit the ModTime field entirely--no-mimetype: Omit the MimeType field entirely--hash: Include per-file Hashes from server-provided digests only (S3 ETag, B2 contentSha1, pCloud, SFTP sha256sum): never downloads. Omitted for directories and whenever the backend does not expose the requested hash cheaply--hash-type : Hash algorithm used by --hash Possible values: - md5 - sha1 - sha256 - sha512 - blake3 - quickxor: Microsoft OneDrive proprietary QuickXorHash. Server-side only: it cannot be computed locally, so there is no download fallback - dropbox: Dropbox content_hash (SHA-256 of per-4MiB-block SHA-256). Server-side only: not a plain digest, no local fallback (default: sha256)--ndjson: Stream one JSON object per line as each entry is discovered, instead of buffering the whole listing into one sorted array. Output is UNSORTED (streaming and a global sort are mutually exclusive) and is not a JSON array: it is newline-delimited JSON (NDJSON), one record per line. Use it to start consuming a long recursive listing immediately, or to pipe into a line-based tool-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Machine-readable listing
aeroftp-cli lsjson --profile ftps-prod /srv/site/[
{"name":"index.php","size":4318,"mtime":"2026-05-26T09:11:00Z","is_dir":false},
{"name":"assets","size":0,"mtime":"2026-05-24T14:02:00Z","is_dir":true},
{"name":"front","size":0,"mtime":"2026-05-24T14:02:00Z","is_dir":true}
]
Categories: safe
Summary: Long listing: permissions, size, date, name (rclone-style `lsl`)
Description: Long listing: permissions, size, date, name (rclone-style `lsl`)
Syntax: aeroftp-cli lsl [OPTIONS] [URL] [PATH]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Long listing (size, mtime, perms)
aeroftp-cli lsl --profile ftps-prod /srv/site/-rw-r--r-- 4.2K 2026-05-26 09:11 index.php -rw-r--r-- 6.8K 2026-05-26 09:11 .htaccess drwxr-xr-x - 2026-05-24 14:02 assets/ drwxr-xr-x - 2026-05-24 14:02 front/
Categories: advanced
Summary: Start the Model Context Protocol server (JSON-RPC 2.0 over stdio)
Description: Start the Model Context Protocol server (JSON-RPC 2.0 over stdio)
Syntax: aeroftp-cli mcp [OPTIONS]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Start MCP server (JSON-RPC over stdio)
aeroftp-cli mcpMCP server ready (protocol_version=2024-11-05) Capabilities: tools(39), resources(profiles), prompts(0) Listening on stdio. Configure your client to invoke `aeroftp-cli mcp`.
Categories: modify
Summary: Create directory (-p: parents, idempotent)
Description: Create a remote directory
Syntax: aeroftp-cli mkdir --profile NAME /remote/dir [-p]
-p, --parents: Create parent directories as needed; no error if existing--access : Issue #252: privacy level for the created folder on providers that model access (OpenDrive). Defaults to `private` when omitted on an OpenDrive target. Cascades to existing children server-side Possible values: - private: Not listed, not shared; reachable only by the owner - public: Anyone with the link can access; searchable - hidden: Accessible by direct link only; not searchable-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Create a remote directory (with parents)
aeroftp-cli mkdir --profile ftps-prod /docs/2026/q2 -pCreating /docs/2026/q2 (parents enabled) OK - /docs/2026/q2 created
Categories: advanced
Summary: Expose a remote as a local filesystem
Description: Mount a remote as a local filesystem (FUSE on Linux/macOS, WebDAV drive on Windows)
Syntax: aeroftp-cli mount --profile NAME /mountpoint
--cache-ttl : Metadata cache TTL in seconds (default: 30) (default: 30)--allow-other: Allow other users to access the mount (Linux/macOS: requires user_allow_other in /etc/fuse.conf)--read-only: Mount as read-only (default: read-write)--cache-poll-interval : KE-C2: How often the mount polls the remote for changes that happened out-of-band. Accepts `30s`, `5m`, `1h`. Reserved for the directory-listing watcher landing with T-DEBT-13; the value is parsed and stored today but the polling task is not yet active. Default: `1m`--attr-timeout : KE-C2: FUSE attribute cache lifetime (`reply.attr` TTL). Accepts `1s`, `500ms`, `5m`. Defaults to the value of `--cache-ttl` for backward compatibility--dir-cache-time : KE-C2: Directory-listing cache lifetime (used when checking whether a cached `readdir` result is fresh enough to serve without a remote round-trip). Accepts `30s`, `5m`. Defaults to the value of `--cache-ttl` for backward compatibility--read-chunk-size : KE-C2: Maximum size of a single `read` call to the remote. Accepts `128k`, `4M`, `1G`. Larger values amortise round-trip latency on high-bandwidth links; smaller values reduce memory pressure and the cost of a cancelled read. Default: `4M`--read-chunk-size-limit : KE-C2: Upper bound for any adaptive ramp of the read chunk size. Reserved for the doubling-strategy code path landing with T-DEBT-13. The value is parsed and stored today but the adaptive ramp is not yet active. Default: unset (no extra cap; the per-call ceiling is `--read-chunk-size`)--write-back-cache: KE-C3: Enable the FUSE kernel write-back cache. When set, the kernel buffers writes in its page cache and flushes them asynchronously to the userspace filesystem. This typically improves throughput on small/random writes at the cost of crash durability: app-visible `mtime` and `size` update on flush, not on every `write`. The capability is negotiated in the FUSE `init` handshake; the kernel may refuse it on older kernels (`FUSE_WRITEBACK_CACHE` requires kernel >= 3.15). Default: off--cache-mode : KE-C1: Caching policy preset. Selects `attr_timeout`, `dir_cache_time`, and the in-memory `cache_ttl` in one switch. `off`: no cache anywhere, TTL=0 on every reply (best-effort: the kernel dentry cache may still serve briefly within an RCU window). `minimal`: 1s attr TTL, no dir listing cache. `writes`: 30s TTL with the existing post-mutation invalidation on `create`/`unlink`/`rename`/ `mkdir`/`rmdir`. `full`: 300s TTL (or whatever `--cache-ttl` dictates), historical AeroFTP default. Granular overrides (`--attr-timeout`, `--dir-cache-time`) win over the mode. Default: `full` Possible values: - off: No in-memory metadata cache, every FUSE callback hits the remote with `TTL=0`. The Linux VFS dentry cache may still serve briefly within an RCU window, so this is best-effort no-cache rather than rigorous bypass - minimal: `attr_timeout=1s`, no directory-listing cache. Tight enough for rapidly-changing remotes while keeping single-stat hammering bounded - writes: `attr_timeout=dir_cache_time=cache_ttl=30s`. Suited to mounts that mutate via this process: the existing post-mutation `invalidate_dir` calls clear stale entries on `create`, `unlink`, `rmdir`, `rename`, `mkdir` - full: `attr_timeout=dir_cache_time=cache_ttl=--cache-ttl`. The historical AeroFTP default; keeps byte-for-byte compatibility with mounts built before KE-C1 landed (default: full)--fuse-threads : T-DEBT-13c: Number of FUSE session event-loop threads. With `N > 1` the kernel can dispatch independent requests (`read`, `readdir`, `getattr`) in parallel and the mount honours the `Send + Sync` invariant of the userspace filesystem. When set the crate also enables `FUSE_DEV_IOC_CLONE`, giving each worker thread its own `/dev/fuse` descriptor for lock-free request processing. Default: unset (single-threaded loop, byte-for-byte compatible with mounts built before the 0.17 bump)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Mount a remote as a local filesystem
aeroftp-cli mount --profile filen-personal /mnt/filenResolving profile 'filen-personal'... OK Mounting at /mnt/filen (FUSE)... OK - mounted in 0.6s Run `fusermount -u /mnt/filen` to unmount.
Categories: advanced
Summary: Mount an UNLOCKED vault (Cryptomator or .aerovault/.aerozip) as a read-only local filesystem (AeroMount for unlocked vaults, #322).
Description: Mount an UNLOCKED vault (Cryptomator or .aerovault/.aerozip) as a read-only local filesystem (AeroMount for unlocked vaults, #322).
Syntax: aeroftp-cli mount-vault [OPTIONS] --kind <KIND> --vault-path <VAULT_PATH> <MOUNTPOINT>
--kind : Vault kind: `cryptomator` (a vault directory) or `aerovault` (a `.aerovault` or `.aerozip` file)--vault-path : Path to the Cryptomator vault directory or the `.aerovault`/`.aerozip` container file--read-only: Read-only (always enforced today; write-back is a later phase)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `mount-vault` (offline help)
aeroftp-cli help mount-vaultMount an UNLOCKED vault (Cryptomator or .aerovault/.aerozip) as a read-only local filesystem (AeroMount for unlocked vaults, #322).
The vault password is read from STDIN, never from the command line, so it never appears in the process table. The mount is always READ-ONLY and EPHEMERAL: the vault is unlocked in this process and its keys are wiped when the process exits, so unmounting is as simple as killing it (the GUI does this on vault-lock / quit). Linux only for now.
Example: `printf %s "$PW" | aeroftp-cli mount-vault /mnt/v --kind cryptomator --vault-path /path/to/vault`
Usage: aeroftp-cli mount-vault [OPTIONS] --kind <KIND> --vault-path <VAULT_PATH> <MOUNTPOINT>
Arguments:
<MOUNTPOINT>
Local mount point: an existing EMPTY directory
Options:
--kind <KIND>
Vault kind: `cryptomator` (a vault directory) or `aerovault` (a `.aerovault` or `.aerozip` file)
--vault-path <VAULT_PATH>
Path to the Cryptomator vault directory or the `.aerovault`/`.aerozip` container file
--read-only
Read-only (always enforced today; write-back is a later phase)
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: modify
Summary: Move/rename
Description: Rename/move a remote file
Syntax: aeroftp-cli mv --profile NAME /old /new
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Rename a remote file
aeroftp-cli mv --profile ftps-prod /docs/draft.pdf /docs/report-final.pdfRenaming /docs/draft.pdf -> /docs/report-final.pdf OK - 245 KB moved in 0.31s
Categories: advanced
Summary: Analyze remote disk usage
Description: Interactive disk usage explorer (ncdu-style TUI)
Syntax: aeroftp-cli ncdu --profile NAME /path [--json|--export FILE]
-d, --depth : Maximum scan depth (default: 50). See `Tree::depth` note: the field name must differ from the global `--max-depth` flag (default: 50)--export : Export scan results to JSON file instead of interactive TUI-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Analyze remote disk usage (interactive-style)
aeroftp-cli ncdu --profile ftps-prod /srv/Scanning /srv/ ...
--- /srv/ -----------------------------
18.4 MB [##########] site/upload/
12.1 MB [###### ] site/assets/
9.8 MB [##### ] logs/
6.9 MB [### ] cache/
Total: 47.2 MB in 1 248 files
Categories: advanced
Summary: Smart preview of a remote file: defaults to first 20 lines, --tail for last, --bytes for binary-safe slice
Description: Quick preview of a remote file (smart default: first 20 lines).
Syntax: aeroftp-cli peek --profile NAME /path/file [-n N] [--bytes B] [--tail]
-n, --lines : Number of lines to print (default: 20) (default: 20)-c, --bytes : Print first N bytes instead of N lines (binary-safe preview)--tail: Show the LAST lines instead of the first. Ignored when --bytes is set-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Smart preview of a remote file
aeroftp-cli peek --profile ftps-prod /srv/data/users.csvDetected: text/csv (UTF-8, LF), 12 481 rows id,email,created_at,status 1,alice@example.com,2026-01-04,active 2,bob@example.com,2026-01-04,active 3,carol@example.com,2026-01-05,pending ... (12 478 more rows)
Categories: advanced
Summary: User-to-user P2P encrypted drives (identity, contacts, grant/import, publish/replicate)
Description: User-to-user P2P encrypted drives (identity, contacts, grant/import, publish/replicate)
Syntax: aeroftp-cli peer [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `peer` (offline help)
aeroftp-cli help peerUser-to-user P2P encrypted drives (identity, contacts, grant/import, publish/replicate)
Usage: aeroftp-cli peer [OPTIONS] <COMMAND>
Commands:
identity Manage this user-partition's P2P identity (its AeroFTP-ID)
contact Manage saved P2P contacts (AeroFTP-IDs you grant drives to)
drive List or forget the drives this partition holds keys for
grant Seal a read capability for one of your drives to a contact (prints/writes a token)
import Import a capability token shared with you and remember the drive's key
publish Publish a local directory as an encrypted, versioned P2P drive
replicate Replicate a drive from a ticket, using a key you already imported
rekey Re-key a drive you publish (revocation): mint a new content key, re-encrypt + republish all files under it (old tokens can no longer read new versions), then re-grant to keep access
send Send a single file to a contact (one-shot, E2EE, no persistent drive)
knock Send a knock: a predefined-code ping (no file), shown as a notification on the recipient
action Send an action: a structured agent-to-agent message (a verb + optional JSON payload), the extensible generalization of a knock. Authenticated by AFID, fire-and-forget
receive Run the standing receive loop: accept incoming files into the inbox and print knocks (Ctrl-C to stop). The headless counterpart of the GUI "Receive files" toggle
agent One-shot agent provisioning: create + identify a peer agent in a single verb
help Print this message or the help of the given subcommand(s)
Options:
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: safe
Summary: Segmented parallel download (alias for get with --segments preset, default 4)
Description: Segmented parallel download (alias for `get` with --segments preset)
Syntax: aeroftp-cli pget --profile NAME /remote/file [./local] [--segments N]
--segments : Number of parallel segments (range 2-16) (default: 4)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Parallel segmented download
aeroftp-cli pget --profile ftps-prod /backups/db.tar.gz --segments 8File: /backups/db.tar.gz (412 MB) Splitting into 8 segments of 51.5 MB each [seg 1/8] OK 6.1 MB/s [seg 2/8] OK 6.4 MB/s ... Merged 8 segments in 0.4s OK - 412 MB in 13.7s (30.1 MB/s aggregated)
Categories: modify
Summary: Create a new server profile in the vault
Description: Create a new server profile in the vault
Syntax: aeroftp-cli profile-add [OPTIONS] --name <NAME> --protocol <PROTOCOL>
--name : Display name. Required, must be non-empty--protocol : Protocol identifier (lowercase). Matches the GUI registry: ftp, ftps, sftp, webdav, webdavs, s3, mega, dropbox, googledrive, onedrive, box, pcloud, zohoworkdrive, etc--host : Hostname or host:port. Optional for cloud providers that resolve endpoints from the protocol alone--port : TCP port. Optional; the GUI default per protocol applies when omitted (21 for FTP, 22 for SFTP, 443 for WebDAV/S, …)--username : Username for the new profile--initial-path : Initial remote path the GUI uses when connecting--local-initial-path : Initial local path for AeroFile-style local↔remote workflows--color : Optional color tag (matches the GUI swatch). Free text--provider-id : Provider id (matches `getProviderById` in the GUI). Optional; auto-derived from the protocol when possible--manual-total : Manual total-storage cap for backends with no quota API (FTP/S3/WebDAV) or that report only used space (Backblaze B2). Accepts "10 GB", "2TB", "5368709120". The provider's own total always takes precedence; this is the fallback so `df` and `profiles` can show used/total/% (item 4a)--credential-json : Seed a JSON credential blob (string) into `server_<id>` as part of creating the profile, matching the GUI Edit modal. Use for OAuth tokens, API keys, or any structured credential. For a plain password use the global `--password-stdin`. Mutually exclusive with --credential-json-file and --password-stdin--credential-json-file : Seed a JSON credential blob read from a file into `server_<id>`. Mutually exclusive with --credential-json and --password-stdin--public-url-base : HTTP base URL used to build share links for this profile (the GUI's "Public URL base", e.g. `https://www.example.com/`). Top-level profile field; without it share links must be re-entered after an import--custom-icon-url : User-chosen custom icon for the My Servers card, as a data URL (`data:image/png;base64,...`). Top-level profile field mirroring the GUI Edit modal icon picker--favicon-url : Auto-detected project favicon, as a data URL. Top-level profile field (normally set by the GUI on connect); exposed here for CLI-driven test fixtures--skip-delta-eligibility-prompt: Suppress the classic-fallback (delta-eligibility) modal for this saved server, matching the GUI checkbox. Top-level profile preference--filen-api-key : Filen CLI API key (issue #230). Stored in the vault under `filen_api_key_<id>` (NOT on the saved profile) and flags `hasStoredFilenApiKey`, exactly like the GUI Edit modal, so the profile connects via the key and skips the /v3/login + TOTP window. Only valid for `--protocol filen`. Inline value is visible in `ps`-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Add a new server profile to the vault
aeroftp-cli profile-add staging sftp://deploy@stage.example.com:/srvResolving sftp://deploy@stage.example.com:22... OK Credentials will be stored encrypted (vault key: $AEROFTP_MASTER_PASSWORD). Profile 'staging' saved (sftp, host=stage.example.com, path=/srv).
Categories: advanced
Summary: Convert a profile to a different mode (replaces the original, issue #215)
Description: Convert a profile to a different mode (replaces the original, issue #215)
Syntax: aeroftp-cli profile-convert-mode [OPTIONS] --mode <MODE> <SELECTOR>
--mode : Target mode within the same provider group: `api`, `webdav`, `s3`, `ftp`--name : Optional display name for the converted profile. Defaults to the source's name--username : Override the username for the converted profile--password : Override the stored password / token for the converted profile. When omitted, the source's credential is cloned. Inline values land in argv/shell history; prefer --password-env or --password-stdin--password-env : Read the password/token from this environment variable instead of --password (keeps the secret out of argv and shell history)--password-stdin: Read the password/token from stdin (first line) instead of --password-y, --yes: Skip the interactive confirmation prompt-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `profile-convert-mode` (offline help)
aeroftp-cli help profile-convert-modeConvert a profile to a different mode (replaces the original, issue #215)
Like `profile-duplicate-mode` but DELETES the source profile, keeping the slot index. Equivalent to the GUI's "Convert to ..." orange button. Requires `--yes` to skip confirmation; otherwise prompts on stderr when stdin is a TTY.
Usage: aeroftp-cli profile-convert-mode [OPTIONS] --mode <MODE> <SELECTOR>
Arguments:
<SELECTOR>
Source profile selector (index, name, or id)
Options:
--mode <MODE>
Target mode within the same provider group: `api`, `webdav`, `s3`, `ftp`
--name <NAME>
Optional display name for the converted profile. Defaults to the source's name
--username <USERNAME>
Override the username for the converted profile
--password <PASSWORD>
Override the stored password / token for the converted profile. When omitted, the source's credential is cloned. Inline values land in argv/shell history; prefer --password-env or --password-stdin
--password-env <VAR>
Read the password/token from this environment variable instead of --password (keeps the secret out of argv and shell history)
--password-stdin
Read the password/token from stdin (first line) instead of --password
-y, --yes
Skip the interactive confirmation prompt
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: advanced
Summary: Copy a saved server profile into ANOTHER user account (#270)
Description: Copy a saved server profile into ANOTHER user account (#270)
Syntax: aeroftp-cli profile-copy-user [OPTIONS] --to-user <USER> <SELECTOR>
--to-user : Target user account name (as listed by `users list`)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `profile-copy-user` (offline help)
aeroftp-cli help profile-copy-userCopy a saved server profile into ANOTHER user account (#270)
Reads the profile (config + any `server_<id>` credential) from the active account and inserts an independent copy under a fresh id into the target user's partition, mirroring the GUI's "Copy to user..." context-menu action. The source profile is left untouched. When the target account is passphrase protected its password is read from `--user-passphrase` / `--passphrase-file` / `AEROFTP_USER_PASSPHRASE_<NAME>` / a TTY prompt: a profile is NEVER written into a protected partition without its passphrase. If the target already holds the same server the copy is skipped (reported as `already_present`).
Usage: aeroftp-cli profile-copy-user [OPTIONS] --to-user <USER> <SELECTOR>
Arguments:
<SELECTOR>
Selector: profile index (1-based, as shown in `profiles`) or (case-insensitive) name / id. Substring match falls back to a unique row only
Options:
--to-user <USER>
Target user account name (as listed by `users list`)
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: destructive
Summary: Delete a saved server profile from the vault
Description: Delete a saved server profile from the vault
Syntax: aeroftp-cli profile-delete [OPTIONS] <SELECTOR>
-y, --yes: Skip the interactive confirmation prompt-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Remove a profile from the vault
aeroftp-cli profile-delete old-serverAbout to delete profile 'old-server' (sftp://legacy.example.com). Confirm with --yes to proceed. Aborted (no --yes).
Categories: modify
Summary: Duplicate a saved server profile inside the vault
Description: Duplicate a saved server profile inside the vault
Syntax: aeroftp-cli profile-duplicate [OPTIONS] <SELECTOR>
--name : Optional display name for the new profile. Defaults to `<original> (copy)`--manual-total : Set (or override) the copy's manual total-storage cap. Accepts "10 GB", "2TB", "5368709120". Useful for sandbox/test profiles that exercise the item 4a quota fallback (the provider's own total still wins when it reports one)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Clone an existing profile
aeroftp-cli profile-duplicate ftps-prod ftps-stagingSource: ftps-prod (ftps://ftps.example.com) New name: ftps-staging Cloned (host, port, user, default path). Update credentials with `profile-set-password`.
Categories: advanced
Summary: Duplicate a profile into a different mode of the same provider group (issue #215)
Description: Duplicate a profile into a different mode of the same provider group (issue #215)
Syntax: aeroftp-cli profile-duplicate-mode [OPTIONS] --mode <MODE> <SELECTOR>
--mode : Target mode within the same provider group: `api`, `webdav`, `s3`, `ftp`--name : Optional display name for the new profile--username : Override the username for the new profile (use when modes expect different credential shapes, e.g. FileLu API key vs WebDAV user)--password : Override the stored password / token for the new profile. When omitted, the source's credential is cloned (works only when the two modes share credentials, e.g. Koofr/OpenDrive). Inline values land in argv/shell history; prefer --password-env or --password-stdin--password-env : Read the password/token from this environment variable instead of --password (keeps the secret out of argv and shell history)--password-stdin: Read the password/token from stdin (first line) instead of --password-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `profile-duplicate-mode` (offline help)
aeroftp-cli help profile-duplicate-modeDuplicate a profile into a different mode of the same provider group (issue #215)
For providers that expose multiple transport surfaces against the same account (Koofr API/WebDAV, OpenDrive API/WebDAV, Filen API/Local-WebDAV/Local-S3, FileLu API/WebDAV/S3/FTP), creates a new profile in the target mode and INSERTS IT RIGHT AFTER the source. The source profile is preserved. Mode label values: `api` (native REST), `webdav`, `s3`, `ftp` (FileLu only).
Usage: aeroftp-cli profile-duplicate-mode [OPTIONS] --mode <MODE> <SELECTOR>
Arguments:
<SELECTOR>
Source profile selector (index, name, or id)
Options:
--mode <MODE>
Target mode within the same provider group: `api`, `webdav`, `s3`, `ftp`
--name <NAME>
Optional display name for the new profile
--username <USERNAME>
Override the username for the new profile (use when modes expect different credential shapes, e.g. FileLu API key vs WebDAV user)
--password <PASSWORD>
Override the stored password / token for the new profile. When omitted, the source's credential is cloned (works only when the two modes share credentials, e.g. Koofr/OpenDrive). Inline values land in argv/shell history; prefer --password-env or --password-stdin
--password-env <VAR>
Read the password/token from this environment variable instead of --password (keeps the secret out of argv and shell history)
--password-stdin
Read the password/token from stdin (first line) instead of --password
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: advanced
Summary: Export saved server profiles to an encrypted `.aeroftp` file
Description: Export saved server profiles to an encrypted `.aeroftp` file
Syntax: aeroftp-cli profile-export [OPTIONS] --output <PATH>
-o, --output : Output `.aeroftp` path--password : Encryption password (visible in `ps`; prefer --password-stdin or env)--password-stdin: Read one password line from stdin--include-credentials: Bundle saved secrets into the encrypted file (per-profile passwords, OAuth/Jottacloud tokens, crypt-overlay passwords and #215 per-protocol snapshots). OFF by default: without it the file carries only the profile configuration, never secrets--ids : Export only these profiles (comma-separated; each token is a profile id or a case-insensitive name). Defaults to every profile of the active user. A token that matches nothing is an error--json: Output a JSON summary on stdout (errors go to stderr in any mode)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `profile-export` (offline help)
aeroftp-cli help profile-exportExport saved server profiles to an encrypted `.aeroftp` file
AeroFTP's native profile backup, byte-compatible with the GUI's My Servers > Export: a password-encrypted envelope carrying the profile list and, with `--include-credentials`, every saved secret (per-profile passwords, OAuth/Jottacloud tokens, crypt-overlay passwords and the #215 per-protocol credential snapshots). Re-import with `profile-import` here or through the GUI. Operates on the active user's vault.
Password resolution (first match wins): AEROFTP_PROFILE_PASSWORD env var -> `--password-stdin` -> `--password` -> interactive prompt.
Usage: aeroftp-cli profile-export [OPTIONS] --output <PATH>
Options:
-o, --output <PATH>
Output `.aeroftp` path
--password <PASSWORD>
Encryption password (visible in `ps`; prefer --password-stdin or env)
--password-stdin
Read one password line from stdin
--include-credentials
Bundle saved secrets into the encrypted file (per-profile passwords, OAuth/Jottacloud tokens, crypt-overlay passwords and #215 per-protocol snapshots). OFF by default: without it the file carries only the profile configuration, never secrets
--ids <IDS>
Export only these profiles (comma-separated; each token is a profile id or a case-insensitive name). Defaults to every profile of the active user. A token that matches nothing is an error
--json
Output a JSON summary on stdout (errors go to stderr in any mode)
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: advanced
Summary: Import server profiles from an encrypted `.aeroftp` file
Description: Import server profiles from an encrypted `.aeroftp` file
Syntax: aeroftp-cli profile-import [OPTIONS] --input <PATH>
-i, --input : Input `.aeroftp` path--password : Decryption password (same resolution order as `profile-export`)--password-stdin: Read one password line from stdin--json: Output a JSON import-result summary on stdout--dry-run: Preview only: decrypt the file and print which profiles would be added, skipped as duplicates, or resemble an existing profile, then exit 0 without touching the vault or the keyring. A duplicate (same profile id) is skipped, never overwritten-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `profile-import` (offline help)
aeroftp-cli help profile-importImport server profiles from an encrypted `.aeroftp` file
Restores profiles and, when the file was exported with credentials, every saved secret back into the active user's vault, including the #215 per-protocol snapshots so a one-account-many-protocols profile keeps each mode's credentials. Profiles already present (same id or host:port:username) are skipped. Byte-compatible with My Servers > Import.
Usage: aeroftp-cli profile-import [OPTIONS] --input <PATH>
Options:
-i, --input <PATH>
Input `.aeroftp` path
--password <PASSWORD>
Decryption password (same resolution order as `profile-export`)
--password-stdin
Read one password line from stdin
--json
Output a JSON import-result summary on stdout
--dry-run
Preview only: decrypt the file and print which profiles would be added, skipped as duplicates, or resemble an existing profile, then exit 0 without touching the vault or the keyring. A duplicate (same profile id) is skipped, never overwritten
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: advanced
Summary: Move a saved server profile into ANOTHER user account (#270)
Description: Move a saved server profile into ANOTHER user account (#270)
Syntax: aeroftp-cli profile-move-user [OPTIONS] --to-user <USER> <SELECTOR>
--to-user : Target user account name (as listed by `users list`)-y, --yes: Skip the interactive confirmation prompt-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `profile-move-user` (offline help)
aeroftp-cli help profile-move-userMove a saved server profile into ANOTHER user account (#270)
Like `profile-copy-user` but DELETES the source profile after the copy succeeds (Cut/Move semantics), mirroring the GUI's "Move to user..." action. The `server_<id>` credential and any `config_favorite_servers` membership are cleaned up on the source side. Without `--yes` the command prompts on stderr when stdin is a TTY. Same passphrase rules as `profile-copy-user`.
Usage: aeroftp-cli profile-move-user [OPTIONS] --to-user <USER> <SELECTOR>
Arguments:
<SELECTOR>
Selector: profile index (1-based, as shown in `profiles`) or (case-insensitive) name / id. Substring match falls back to a unique row only
Options:
--to-user <USER>
Target user account name (as listed by `users list`)
-y, --yes
Skip the interactive confirmation prompt
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: modify
Summary: Set or update the credential blob for a saved server profile
Description: Set or update the credential blob for a saved server profile
Syntax: aeroftp-cli profile-set-password [OPTIONS] <SELECTOR>
--password : Inline password (visible in `ps`; prefer --password-stdin or --password-env). Mutually exclusive with the other --password* and --credential-json* sources--password-env : Read one password line from the named environment variable--password-stdin: Read one password line from stdin--credential-json : JSON credential blob (string). Stored verbatim under `server_<id>`. Mutually exclusive with the --password* flags--credential-json-file : Read JSON credential blob from a file. Mutually exclusive with --credential-json and the --password* flags-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Rotate the password of a saved profile
aeroftp-cli profile-set-password ftps-prodEnter new password: ******** Confirm: ******** Re-encrypting vault entry for 'ftps-prod'... OK Old credential overwritten. No copies linger on disk.
Categories: safe
Summary: List saved servers
Description: List saved server profiles from the encrypted vault
Syntax: aeroftp-cli profiles [--json]
--sort : Override the GUI-persisted sort. Format: `<col>[:asc|desc]`. Sortable columns: name, type, used, total, pct, last, fav. Use `manual` (alias `index`) to restore the saved profile order--hide : Comma-separated columns to hide for this run only (not persisted). Available (case-insensitive): name, type, host, used, total, pct, path, last, fav (also accepts `favorite`/`favourite`). `*` or `all` hides every optional column (`#` and Name always stay pinned)--show : Show only these columns for this run only (not persisted). This is an exclusive allowlist: every other optional column is hidden, like the My Servers Table view in the GUI. `#` and Name always stay pinned. `*` or `all` shows every column. Same names as `--hide`--breakdown: Append a per-protocol-class breakdown after the main listing. In JSON mode, wrap the output in `{ profiles, summary, breakdown }` (the default JSON shape: a flat array: stays back-compatible)-i, --interactive: Drop into an interactive prompt after the table (rclone-config-style). Single-letter actions on a numbered profile: `<n>l` lists, `<n>t` trees, `<n>d` deletes from the vault, `q` quits. Requires a TTY; ignored in JSON / non-interactive mode--group : Show only profiles in this group (case-insensitive name), the CLI analogue of the GUI group filter chip. Groups are managed from the interactive prompt (`g <selector> <group>`) or the GUI--health: Probe the local helper-app bridges (Filen Desktop / MEGAcmd) and print a status line per bridge profile after the table. Off by default: probing the loopback ports adds a small latency, so the plain listing stays instant. Mirrors the GUI's 🔴/🟠/🟢 detector--tui: Open the inline action menu (TUI) directly, skipping the `-i` line prompt (Ehud #311). Implies interactive and needs a TTY; equivalent to running `-i` and immediately typing `tui`. Quitting the menu exits-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')List saved profiles
aeroftp-cli profilesNAME PROTOCOL HOST DEFAULT_PATH ftps-prod ftps ftps.example.com /srv/ filen-personal filen filen.io /docs/ hetzner-backup sftp backup.hetzner.example /home/aero/ 3 profiles in vault
Categories: destructive
Summary: Remove a path and all of its contents (recursive delete)
Description: Remove a path and all of its contents (recursive delete)
Syntax: aeroftp-cli purge [OPTIONS] [URL] [PATH]
-f, --force: Skip the confirmation prompt--dry-run: Preview only: list what would be deleted and the bytes reclaimed, delete nothing. Never prompts-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Permanently remove trashed items
aeroftp-cli purge --profile filen-personal --allTrash on filen-personal: 87 items (1.2 GB) About to PERMANENTLY delete. Re-run with --yes to confirm. Aborted (no --yes).
Categories: modify
Summary: Upload file (-n: no-clobber, skip if exists)
Description: Upload file(s) to remote server (supports glob patterns like "*.csv")
Syntax: aeroftp-cli put --profile NAME ./local /remote/path [-n]
-r, --recursive: Recursive upload (directories)-n, --no-clobber: Do not overwrite existing remote files--delta: Z.4.5 R1: route the upload through `AerorsyncDeltaTransport` when the provider exposes one (SFTP today). Auto-falls back to the classic transfer when the transport is not delta-eligible (file too small, missing host-key pin, password auth without dispatch wire-up, etc.). No-op for non-SFTP providers and for recursive / glob uploads--access : Issue #252: privacy level to apply to the uploaded file on providers that model access (OpenDrive). Defaults to `private` when omitted on an OpenDrive target. Applies to single-file uploads; for recursive/glob uploads set the destination folder privacy with `mkdir --access` (it cascades to children) Possible values: - private: Not listed, not shared; reachable only by the owner - public: Anyone with the link can access; searchable - hidden: Accessible by direct link only; not searchable-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Upload a single file
aeroftp-cli put --profile ftps-prod ./report.pdf /docs/Connected to ftps-prod (ftps://ftps.example.com) Uploading ./report.pdf -> /docs/report.pdf (245 KB) [#####################] 100% 245 KB / 245 KB 308 KB/s OK - uploaded in 0.79s
Upload many CSV files with a glob
aeroftp-cli put --profile ftps-prod "./exports/*.csv" /data/Expanded glob: 4 files (1.8 MB total) [1/4] sales_q1.csv 412 KB OK [2/4] sales_q2.csv 487 KB OK [3/4] sales_q3.csv 455 KB OK [4/4] sales_q4.csv 503 KB OK Done - 1.8 MB in 6.1s (avg 295 KB/s)
Categories: modify
Summary: Upload stdin directly to a remote file
Description: Upload stdin directly to a remote file
Syntax: aeroftp-cli rcat [OPTIONS] [URL] [REMOTE]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Stream stdin to a remote file
tar czf - ./dist | aeroftp-cli rcat --profile ftps-prod /backups/dist-2026-05-27.tar.gzStreaming stdin -> /backups/dist-2026-05-27.tar.gz [##############] 86 MB written (12.4 MB/s) OK - closed in 6.9s
Categories: modify
Summary: rclone-crypt compatible operations (separate from `crypt` overlay)
Description: rclone-crypt compatible operations (separate from `crypt` overlay)
Syntax: aeroftp-cli rclone-crypt [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Read a rclone-crypt remote
aeroftp-cli rclone-crypt ls --profile filen-personal /encrypted --passwords-from-envResolving rclone-crypt headers in /encrypted... Decrypted 412 filenames report.pdf photos/2025-summer.zip archive/old-site.tar.gz
Categories: advanced
Summary: Return categorized local-vs-remote diff for agents
Description: Reconcile local and remote trees with categorized diff output
Syntax: aeroftp-cli reconcile --profile NAME ./local /remote --json
--checksum: Use checksums instead of size-only comparison where available--one-way: Only consider files present locally-e, --exclude : Exclude patterns (can repeat: -e "*.tmp" -e ".git")--reconcile-format : Output verbosity: detailed (default) or summary [possible values: detailed, summary] (default: detailed)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Categorized diff for agents (JSON)
aeroftp-cli reconcile --profile ftps-prod ./_site /srv/site --json{
"only_local": ["new-page.html", "img/hero-v2.webp"],
"only_remote": ["legacy/old-banner.png"],
"diverged": ["index.php"],
"identical": 1246,
"summary": {"add": 2, "remove": 1, "update": 1}
}
Categories: destructive
Summary: Delete file (-f: force, no error if not found)
Description: Delete a remote file or directory
Syntax: aeroftp-cli rm --profile NAME /path [-f]
-r, --recursive: Recursive delete (directories)-f, --force: Force (no confirmation for recursive)--dry-run: Preview only: list what would be deleted and the bytes reclaimed, delete nothing. Never prompts-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Delete a single file
aeroftp-cli rm --profile ftps-prod /tmp/old.logDeleting /tmp/old.log... OK - removed (released 12 KB)
Categories: destructive
Summary: Remove a single empty directory (fails if not empty)
Description: Remove a single empty directory (fails if not empty)
Syntax: aeroftp-cli rmdir [OPTIONS] [URL] [PATH]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Remove an empty remote directory
aeroftp-cli rmdir --profile ftps-prod /tmp/empty-dirVerifying /tmp/empty-dir is empty... OK (0 entries) Removing /tmp/empty-dir OK
Categories: destructive
Summary: Recursively remove EMPTY directories under a path (files and non-empty directories are left untouched; the path itself is never removed). Dry-run by default; --force to delete
Description: Recursively remove EMPTY directories under a path (files and non-empty directories are left untouched; the path itself is never removed). Dry-run by default; --force to delete
Syntax: aeroftp-cli rmdirs [OPTIONS] [URL] [PATH]
--force: Actually remove the empty directories (default: dry-run)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Recursively remove empty directories
aeroftp-cli rmdirs --profile ftps-prod /tmp/cacheScanning /tmp/cache for empty directories... Pruning 18 empty leaves -> 6 intermediate dirs OK - 24 directories removed in 0.42s
Categories: advanced
Summary: Expose a remote over a local protocol bridge
Description: Serve a remote over a local protocol
Syntax: aeroftp-cli serve <http|webdav|ftp|sftp> --profile NAME /path
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Expose a remote over local WebDAV
aeroftp-cli serve webdav --profile filen-personal --listen 127.0.0.1:8080 /Bridge: filen-personal -> WebDAV Listen: http://127.0.0.1:8080/ Auth: none (loopback only) Mount in Finder/Explorer with the URL above. Ctrl+C to stop.
Categories: safe
Summary: Show total size and object count under a path (recursive scan)
Description: Show total size and object count under a path (recursive scan)
Syntax: aeroftp-cli size [OPTIONS] [URL] [PATH]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Total size and object count under a path
aeroftp-cli size --profile ftps-prod /srv/site/Scanning /srv/site/ recursively... Total size: 47.2 MB Objects: 1 248 files in 84 directories Largest: /srv/site/upload/screenshots/screenshot-1.png (1.8 MB)
Categories: safe
Summary: Measure upload/download throughput against a writable remote
Description: Measure upload/download throughput against a writable remote
Syntax: aeroftp-cli speed [OPTIONS] [URL]
-s, --test-size : Test file size (e.g. 1M, 8M, 64M, 1G). Also accepts --size / -s [aliases: --size] (default: 10M)--iterations : Number of upload/download iterations (default: 1)--remote-path : Remote path override for the temporary benchmark file--no-integrity: Skip SHA-256 integrity verification (faster but less rigorous)--json-out : Write a JSON v1 report to this path-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Measure upload + download speed
aeroftp-cli speed --profile ftps-prod /tmp/Uploading 16 MB test payload... Upload: 12.4 MB/s Downloading 16 MB test payload... Download: 28.7 MB/s RTT: 42 ms
Categories: safe
Summary: Benchmark and rank multiple servers side-by-side
Description: Benchmark and rank multiple servers side-by-side
Syntax: aeroftp-cli speed-compare [OPTIONS] <URLS>...
-s, --test-size : Test file size (e.g. 10M, 100M) [aliases: --size] (default: 10M)--parallel : Maximum parallel runs (1-4, default 2) (default: 2)--no-integrity: Skip SHA-256 integrity verification--json-out : Write a JSON v1 compare report to this path--csv-out : Write a CSV report to this path--md-out : Write a Markdown report to this path-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Benchmark several servers side-by-side
aeroftp-cli speed-compare ftps-prod hetzner-backup filen-personalRunning 16 MB up+down on each target (90s budget)... TARGET UP MB/s DOWN MB/s RTT ftps-prod 12.4 28.7 42 ms hetzner-backup 38.2 71.5 8 ms filen-personal 6.1 11.3 120 ms Winner: hetzner-backup
Categories: safe
Summary: File metadata
Description: Show file/directory metadata
Syntax: aeroftp-cli stat --profile NAME /path/ [--json]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')File metadata
aeroftp-cli stat --profile ftps-prod /docs/report.pdf --json{
"path": "/docs/report.pdf",
"size": 251392,
"type": "file",
"modified": "2026-05-24T14:02:11Z",
"perms": "rw-r--r--"
}
Categories: destructive, modify
Summary: Sync with orphan deletion (capped by --max-delete, default 100; non-interactive runs require an explicit --max-delete)
Description: Synchronize local and remote directories
Syntax: aeroftp-cli sync --profile NAME ./local/ /remote/ --delete
--direction : Sync direction: upload, download, both (default: both)--dry-run: Dry run (show what would happen without executing)--delete: Delete orphaned files on destination-e, --exclude : Exclude patterns (can repeat: --exclude "*.tmp" --exclude ".git") --error-correction[=<LEVEL>] Generate AeroSync Reed-Solomon .aerocorrect sidecars after uploads. Optional level: low, medium, quartile, high, or a percentage 5-50 [aliases: --ec]--ec-max-overhead : Minimum-benefit gate for EC: skip a file's .aerocorrect sidecar when its size would exceed this percentage of the file (tiny files balloon past the parity floor). 0 (default) disables the gate. Has no effect without --error-correction--track-renames: Detect renamed files by hash to avoid re-upload--max-delete : Safety limit: abort if more than N files (or N%) would be deleted--backup-dir : Move overwritten/deleted files to backup directory--backup-suffix : Suffix for backup files (e.g., ".bak") (default: "")--suffix-keep-extension: Place suffix before the file extension (file.bak.txt instead of file.txt.bak)--compare-dest : Skip transfer if file exists in this local directory with same size+mtime--copy-dest : Copy from this local directory instead of downloading if file matches size+mtime--from-reconcile : Consume a reconcile JSON file instead of re-scanning local and remote trees--conflict-mode : Conflict resolution for --direction both: newer, older, larger, smaller, rename, skip (default: newer) (default: newer)--skip-matching: Trust size-only matches and skip transfers even when mtimes differ--resync: Discard previous bisync snapshot and rebuild from scratch-P, --profile : Use a saved server profile instead of URL (name or ID)--watch: Watch local directory for changes and re-sync automatically--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--watch-mode : Watcher backend: auto, native, poll (default: auto) (default: auto)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--watch-debounce-ms : Debounce window in milliseconds (default: 1500) (default: 1500)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--watch-cooldown : Minimum seconds between consecutive re-syncs (default: 15) (default: 15)--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--watch-rescan : Full rescan interval in seconds, 0 to disable (default: 300) (default: 300)--watch-no-initial: Skip the initial full sync on startup--local: Force local-to-local sync mode (no remote). Auto-detected when both paths are absolute and no --profile / URL is given--limit-rate : Speed limit (e.g., "1M", "500K")--no-local-delta: Disable LocalDeltaTransport for local-to-local sync; use plain copy instead. No-op for remote sync--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--delta: Route remote SFTP uploads/downloads through the AerorsyncBatch session-reuse path (1 SSH handshake + N channel-execs across the whole batch). Auto-falls back to classic SFTP per-file when the transport reports `TooSmall` or the SFTP provider does not expose a delta transport (e.g. password auth, missing host-key pin). On transient SSH channel drops the batch transparently reconnects once (Z.1.2). No-op for non-SFTP backends and for local-to-local sync (which uses LocalDeltaTransport via --no-local-delta)--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Dry-run sync local -> remote
aeroftp-cli sync --profile ftps-prod ./_site/ /srv/site/ --dry-runScanning local: ./_site/ (1248 files, 47 MB) Scanning remote: /srv/site/ (1201 files, 44 MB) Plan: upload 52 | update 14 | delete 5 (with --delete only) DRY-RUN - nothing was transferred Next: drop --dry-run to apply, or add --delete to mirror
Categories: advanced
Summary: Preflight sync checks, risks, and next command
Description: Preflight checks and risk summary before sync
Syntax: aeroftp-cli sync-doctor --profile NAME ./local /remote --json
--direction : Sync direction: upload, download, both (default: both)--delete: Delete orphaned files on destination-e, --exclude : Exclude patterns--track-renames: Detect renamed files by hash to avoid re-upload--conflict-mode : Conflict resolution for --direction both: newer, older, larger, smaller, rename, skip (default: newer)--resync: Discard previous bisync snapshot and rebuild from scratch--checksum: Use checksums instead of size/mtime --error-correction[=<LEVEL>] Estimate AeroSync Reed-Solomon .aerocorrect sidecar cost for planned uploads. Optional level: low, medium, quartile, high, or a percentage 5-50 [aliases: --ec]--ec-max-overhead : Minimum-benefit gate for the EC estimate: count a file as a low-benefit skip when its sidecar would exceed this percentage of the file size. 0 (default) disables the gate, matching the default upload behavior-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Preflight a sync (risks + plan)
aeroftp-cli sync-doctor --profile ftps-prod ./_site /srv/site --json{
"checks": {"reachable":true,"writable":true,"clock_skew_s":1},
"plan": {"add":52,"update":14,"delete":5,"identical":1177},
"risks": ["5 files would be deleted on --delete"],
"next_cmd": "aeroftp-cli sync --profile ftps-prod ./_site/ /srv/site/"
}
Categories: advanced
Summary: Read last lines of a remote text file
Description: Print last N lines of a remote file
Syntax: aeroftp-cli tail --profile NAME /path/file [-n N]
-n, --lines : Number of lines to print (default: 20) (default: 20)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Last 5 lines of a remote log
aeroftp-cli tail -n 5 --profile ftps-prod /srv/logs/error.log2026-05-27 11:02:14 WARN upstream timeout (2s) on /api/widget/42 2026-05-27 11:02:18 INFO retry succeeded after 1 attempt 2026-05-27 11:04:01 WARN slow query (820ms) on page_widgets 2026-05-27 11:09:33 INFO cache warmup complete (3214 keys) 2026-05-27 11:12:07 INFO daemon heartbeat OK
Categories: advanced
Summary: Create file or update modified time
Description: Create empty file or update timestamp
Syntax: aeroftp-cli touch --profile NAME /path/file [--timestamp ISO8601]
--timestamp : Timestamp override (ISO 8601)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Create or update mtime on a remote file
aeroftp-cli touch --profile ftps-prod /srv/site/.deploy-markerTouched /srv/site/.deploy-marker (mtime=2026-05-27T13:01:42Z) OK
Categories: modify
Summary: Copy files between two saved profiles (cross-profile, no local hop on disk)
Description: Transfer files between two saved profiles (cross-profile copy)
Syntax: aeroftp-cli transfer "SRC_PROFILE" "DST_PROFILE" /src/path /dst/path [-r] [--dry-run] [--skip-existing]
-r, --recursive: Recursive (copy directories)--dry-run: Plan without executing--skip-existing: Skip files already present on destination (size+mtime match)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Cross-profile copy (no local hop)
aeroftp-cli transfer ftps-prod hetzner-backup /srv/site/upload /backups/upload -rSource: ftps-prod (ftps://ftps.example.com) Destination: hetzner-backup (sftp://backup.hetzner.example) Streaming 1 248 files (47 MB) directly between servers... OK - 47 MB in 18.4s (2.6 MB/s)
Categories: advanced
Summary: Preflight cross-profile transfer checks, plan, and risks
Description: Preflight checks and risk summary before cross-profile transfer
Syntax: aeroftp-cli transfer-doctor "SRC" "DST" /src /dst --json
-r, --recursive: Recursive (copy directories)--skip-existing: Skip files already present on destination-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Preflight a cross-profile transfer
aeroftp-cli transfer-doctor ftps-prod hetzner-backup /srv /backups --json{
"src_reachable": true,
"dst_writable": true,
"plan_files": 1248,
"plan_bytes": 49520640,
"warnings": ["src is FTPS (no resume on partial chunks)"]
}
Categories: advanced
Summary: Server-side trash / recycle bin: list, restore, or permanently delete.
Description: Server-side trash / recycle bin: list, restore, or permanently delete.
Syntax: aeroftp-cli trash [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `trash` (offline help)
aeroftp-cli help trashServer-side trash / recycle bin: list, restore, or permanently delete.
A `rm` against a provider with a recycle bin (Nextcloud, and the other trash-capable backends) does NOT free space: the server moves the file to its trash. This is the counterpart that actually reclaims it, and the CLI equivalent of the GUI trash managers.
Usage: aeroftp-cli trash [OPTIONS] <COMMAND>
Commands:
list List the items currently in the server-side trash
empty Permanently delete EVERY item in the trash. This frees the space
restore Restore one item out of the trash, back to its original path
delete Permanently delete a single trash item
help Print this message or the help of the given subcommand(s)
Options:
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: safe
Summary: Directory tree
Description: Display remote directory tree
Syntax: aeroftp-cli tree --profile NAME /path/ [-d N] [--json]
-d, --depth : Maximum depth to descend (default: 3)-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Display a remote tree
aeroftp-cli tree --profile ftps-prod /docs/ --max-depth 2/docs/ ├── 2025/ │ ├── annual-report.pdf │ └── invoices/ ├── 2026/ │ ├── q1-roadmap.pdf │ └── q2-roadmap.pdf └── README.md 5 directories, 4 files
Categories: advanced
Summary: Open the interactive terminal UI
Description: Open the interactive terminal UI
Syntax: aeroftp-cli tui [OPTIONS]
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `tui` (offline help)
aeroftp-cli help tuiOpen the interactive terminal UI
Usage: aeroftp-cli tui [OPTIONS]
Options:
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: advanced
Summary: Manage local AeroFTP user partitions
Description: Manage local AeroFTP user partitions
Syntax: aeroftp-cli users [OPTIONS] [COMMAND]
-i, --interactive: Drop into an interactive prompt after the table (rclone-config-style): re-index(#), Rename(R), Copy(C), Delete(D), Fav(F), List(L), Tree(T). Requires a TTY; ignored in JSON / non-interactive mode. Per Ehud #311--tui: Open the inline action menu (TUI) directly, skipping the `-i` line prompt (Ehud #311). Implies interactive and needs a TTY; equivalent to running `-i` and immediately typing `tui`. Quitting the menu exits-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `users` (offline help)
aeroftp-cli help usersManage local AeroFTP user partitions
These users are entirely offline: they are local partitions of the vault on this device and are not tied to any online account or login.
Usage: aeroftp-cli users [OPTIONS] [COMMAND]
Commands:
list List local AeroFTP users
add Add a local AeroFTP user
rename Rename a local AeroFTP user
delete Delete a local AeroFTP user
switch Switch the active local AeroFTP user
sort Reorder users for the GUI dropdown and lock screen
set-passphrase Set, change, or remove a user's account passphrase
lock Lock the current in-memory user session
help Print this message or the help of the given subcommand(s)
Options:
-i, --interactive
Drop into an interactive prompt after the table (rclone-config-style): re-index(#), Rename(R), Copy(C), Delete(D), Fav(F), List(L), Tree(T). Requires a TTY; ignored in JSON / non-interactive mode. Per Ehud #311
--tui
Open the inline action menu (TUI) directly, skipping the `-i` line prompt (Ehud #311). Implies interactive and needs a TTY; equivalent to running `-i` and immediately typing `tui`. Quitting the menu exits
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
Categories: modify
Summary: AeroVault encrypted container operations (.aerovault), all formats
Description: AeroVault encrypted container operations (.aerovault), all formats
Syntax: aeroftp-cli vault [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect vault encryption state
aeroftp-cli vault infoVault path: ~/.config/aeroftp/vault.db Cipher: XChaCha20-Poly1305 (libsodium) KDF: Argon2id (m=64 MB, t=3) Entries: 7 profiles, 3 aliases, 0 webhooks Locked: no (unlocked 14 min ago)
Categories: advanced
Summary: List, download, or restore previous versions of a file
Description: List, download, or restore previous versions of a file
Syntax: aeroftp-cli versions [OPTIONS] <COMMAND>
-P, --profile : Use a saved server profile instead of URL (name or ID)--user : Select an AeroFTP local user partition (or set AEROFTP_USER)--user-passphrase : Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)--passphrase-file : Read the AeroFTP user passphrase from the first line of a file--master-password : Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)--limit-rate : Speed limit (e.g., "1M", "500K")--bwlimit : Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")--parallel : Number of parallel transfer workers (default: 4, max: 32) (default: 4)--partial: Resume interrupted transfers using partial files or remote offsets when supported--include : Include only files matching glob pattern (repeatable)--exclude-global : Exclude files matching glob pattern (repeatable)--include-from : Read include patterns from file (one per line, # comments)--exclude-from : Read exclude patterns from file (one per line, # comments)--files-from : Read file list from file (one path per line). Only listed files are transferred--files-from-raw : Like --files-from but don't skip empty lines or strip whitespace--immutable: Never overwrite existing files on destination (append-only / immutable mode)--no-check-dest: Skip listing destination before transfer (assume dest is empty)--max-depth : Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r--min-size : Minimum file size (e.g., "100k", "1M", "1G")--max-size : Maximum file size (e.g., "100k", "1M", "1G")--min-age : Skip files newer than duration (e.g., "7d", "24h", "2w")--max-age : Skip files older than duration (e.g., "7d", "24h", "2w")--max-transfer : Abort after transferring this many bytes total (e.g., "10G", "500M")--max-backlog : Maximum number of queued transfer tasks (default: 10000) (default: 10000)--schedule : Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed) [possible values: fifo, size] (default: fifo)--retries : Number of retries for failed operations (default: 3, 0 = no retry) (default: 3)--retries-sleep : Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s") (default: 1s)--dump : Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)--chunk-size : Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3--buffer-size : Override download buffer size (e.g., "256K", "1M")--multi-thread-streams : Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set (default: 1)--multi-thread-cutoff : Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set (default: 250M)--sftp-download-preset : SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers--sftp-readahead : Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active--default-time : Default mtime when backend returns None (ISO 8601 or "now")--transfer-engine : Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE` [possible values: auto, dag, legacy] (default: auto)--fast-list: Use recursive listing in a single API call (S3 only, faster for large datasets)--inplace: Write downloads directly to final path (no .aerotmp temp file)--order-by : KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order) [possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc] (default: none)--no-traverse: KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)--tpslimit : KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`--tpslimit-burst : KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`--checkers : KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool (default: 8)--sftp-concurrency : KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16. IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.--s3-upload-concurrency : KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3--s3-no-check-bucket: KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3--s3-disable-checksum: KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3--s3-acl : KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`--s3-storage-class : KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`--onedrive-no-versions: KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive--onedrive-list-chunk : KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`--onedrive-link-scope : KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`--azure-upload-concurrency : KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob--azure-disable-checksum: KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob--azure-access-tier : KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob--azure-archive-tier-delete: KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob--drive-cross-account-copy: KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive--drive-pacer-burst : KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers--drive-pacer-min-sleep : KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default--drive-acknowledge-abuse: KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive--aimd-hint : KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`--aimd-disable: KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic--aimd-min-window : KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`--aimd-max-window : KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)--aimd-step-window : KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`--aimd-config : KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class. File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.-h, --help: Print help (see a summary with '-h')Inspect `versions` (offline help)
aeroftp-cli help versionsList, download, or restore previous versions of a file
Only providers that expose versioning answer (e.g. Filen, Dropbox, Google Drive, OneDrive, pCloud, kDrive). Use `versions list` to get a version id, then `versions get` to download it or `versions restore` to make it current.
Usage: aeroftp-cli versions [OPTIONS] <COMMAND>
Commands:
list List previous versions of a file (newest first)
get Download a specific previous version of a file
restore Restore a file to a specific previous version
purge Permanently delete (purge) one version or delete marker of a file
trash List the S3 trash: soft-deleted objects and delete markers under a prefix
empty-trash Empty the S3 trash under a prefix (purge every version and delete marker)
help Print this message or the help of the given subcommand(s)
Options:
-P, --profile <PROFILE>
Use a saved server profile instead of URL (name or ID)
--user <USER>
Select an AeroFTP local user partition (or set AEROFTP_USER)
[env: AEROFTP_USER=]
--user-passphrase <USER_PASSPHRASE>
Account passphrase for the selected AeroFTP user (prefer env/file over CLI args)
[env: AEROFTP_USER_PASSPHRASE]
--passphrase-file <PASSPHRASE_FILE>
Read the AeroFTP user passphrase from the first line of a file
--master-password <MASTER_PASSWORD>
Master password for encrypted vault (or set AEROFTP_MASTER_PASSWORD)
[env: AEROFTP_MASTER_PASSWORD]
--limit-rate <LIMIT_RATE>
Speed limit (e.g., "1M", "500K")
--bwlimit <BWLIMIT>
Bandwidth schedule (e.g., "08:00,512k 12:00,10M 18:00,off")
--parallel <PARALLEL>
Number of parallel transfer workers (default: 4, max: 32)
[default: 4]
--partial
Resume interrupted transfers using partial files or remote offsets when supported
--include <INCLUDE>
Include only files matching glob pattern (repeatable)
--exclude-global <EXCLUDE_GLOBAL>
Exclude files matching glob pattern (repeatable)
--include-from <INCLUDE_FROM>
Read include patterns from file (one per line, # comments)
--exclude-from <EXCLUDE_FROM>
Read exclude patterns from file (one per line, # comments)
--files-from <FILES_FROM>
Read file list from file (one path per line). Only listed files are transferred
--files-from-raw <FILES_FROM_RAW>
Like --files-from but don't skip empty lines or strip whitespace
--immutable
Never overwrite existing files on destination (append-only / immutable mode)
--no-check-dest
Skip listing destination before transfer (assume dest is empty)
--max-depth <MAX_DEPTH>
Maximum directory recursion depth (default: unlimited). Applies to ls -R, find, sync, get -r
--min-size <MIN_SIZE>
Minimum file size (e.g., "100k", "1M", "1G")
--max-size <MAX_SIZE>
Maximum file size (e.g., "100k", "1M", "1G")
--min-age <MIN_AGE>
Skip files newer than duration (e.g., "7d", "24h", "2w")
--max-age <MAX_AGE>
Skip files older than duration (e.g., "7d", "24h", "2w")
--max-transfer <MAX_TRANSFER>
Abort after transferring this many bytes total (e.g., "10G", "500M")
--max-backlog <MAX_BACKLOG>
Maximum number of queued transfer tasks (default: 10000)
[default: 10000]
--schedule <SCHEDULE>
Multi-file admission schedule for the streaming transfer frontier (DAG-P2-08). `fifo` (default) preserves arrival order; `size` prefers small files for low latency with aging so large files never starve (rclone-style size,mixed)
[default: fifo]
[possible values: fifo, size]
--retries <RETRIES>
Number of retries for failed operations (default: 3, 0 = no retry)
[default: 3]
--retries-sleep <RETRIES_SLEEP>
Delay between retries (e.g., "5s", "1m", "500ms"; default: "1s")
[default: 1s]
--dump <DUMP>
Dump HTTP debug info to stderr (comma-separated: headers,bodies,auth)
--chunk-size <CHUNK_SIZE>
Override upload chunk size (e.g., "64M", "16M"). Min 5M for S3
--buffer-size <BUFFER_SIZE>
Override download buffer size (e.g., "256K", "1M")
--multi-thread-streams <MULTI_THREAD_STREAMS>
Number of concurrent Range streams per single-file download (rclone `--multi-thread-streams`). Default 1 = disabled. Range 1-16. Honored by S3/Azure (native) and, after a live strict 206 probe, by WebDAV (Basic/anonymous auth; Digest excluded) and Koofr. Any backend or server that does not prove Range honesty falls back to single-stream transparently. Reads default from `AEROFTP_MULTI_THREAD_STREAMS` if set
[env: AEROFTP_MULTI_THREAD_STREAMS=]
[default: 1]
--multi-thread-cutoff <MULTI_THREAD_CUTOFF>
Minimum file size for multi-thread download (rclone `--multi-thread-cutoff`). Default `250M`. Accepts size suffixes `K`/`M`/`G`. Files smaller than this always use the single-stream path, regardless of `--multi-thread-streams`. Reads default from `AEROFTP_MULTI_THREAD_CUTOFF` if set
[env: AEROFTP_MULTI_THREAD_CUTOFF=]
[default: 250M]
--sftp-download-preset <SFTP_DOWNLOAD_PRESET>
SFTP single-file download tuning preset. Presets configure independent SSH connections, read-ahead, and the multi-connection cutoff together. `efficient` matches the GUI default. The option is ignored for non-SFTP providers
--sftp-readahead <SFTP_READAHEAD>
Explicit SFTP read-ahead window. Overrides `--sftp-download-preset`. Range 2-1024. When neither CLI option is supplied, the legacy `AEROFTP_SFTP_READAHEAD` provider fallback remains active
--default-time <DEFAULT_TIME>
Default mtime when backend returns None (ISO 8601 or "now")
--transfer-engine <TRANSFER_ENGINE>
Single-file transfer engine selection. `auto` consults the data-driven router (default), `dag` forces every transfer through the shaped-graph DAG engine, `legacy` forces the provider-direct path. The router is populated from Phase A benchmark measurements (see `docs/dev/benchmarks/2026-05-2{4,5}_phaseA-*/`) and revalidated by T-DEBT-RTR-04. The default is DAG everywhere; `legacy` remains an operator override. Reads default from `AEROFTP_TRANSFER_ENGINE`
[env: AEROFTP_TRANSFER_ENGINE=]
[default: auto]
[possible values: auto, dag, legacy]
--fast-list
Use recursive listing in a single API call (S3 only, faster for large datasets)
--inplace
Write downloads directly to final path (no .aerotmp temp file)
--order-by <ORDER_BY>
KE-A5: Order the transfer queue by the given key (rclone `--order-by`). Applies to multi-file operations: sync, recursive get/put, dedupe. Single-file operations and `ls` are unaffected (`ls` keeps its own `--sort`). Defaults to `none` (FIFO from the input order)
[default: none]
[possible values: none, name, name-desc, size-asc, size-desc, modtime-asc, modtime-desc]
--no-traverse
KE-A4: Skip the full remote listing during sync but still stat every candidate upload to avoid overwriting files that already match by size (rclone `--no-traverse`). Use when the source has a small number of files and the destination has millions (typical S3 bucket with a long-running history). Implies `--direction upload`; combine with `--no-check-dest` for the fully-trust-me variant (skip the stat too)
--tpslimit <TPSLIMIT>
KE-A3: Hard cap on HTTP transactions per second across all providers (rclone `--tpslimit`). Layered ABOVE AIMD: AIMD may shrink the effective parallelism well below this cap on 429s, but never exceeds it. Default `0` = unlimited (AIMD remains the sole throttle). Honored by every backend that goes through the shared `send_with_retry` wrapper (S3, B2, Azure, all OAuth clouds, Filen, WebDAV, ImageKit, Drime, Uploadcare, Cloudinary). SFTP / FTP session protocols are unaffected. Reads default from `AEROFTP_TPSLIMIT`
[env: AEROFTP_TPSLIMIT=]
[default: 0]
--tpslimit-burst <TPSLIMIT_BURST>
KE-A3: Burst capacity for `--tpslimit`. Lets the limiter absorb short spikes without queueing: e.g. `--tpslimit 10 --tpslimit-burst 50` allows up to 50 requests back-to-back before throttling kicks in at 10/s. Default `0` = same as `--tpslimit` (no burst). Reads default from `AEROFTP_TPSLIMIT_BURST`
[env: AEROFTP_TPSLIMIT_BURST=]
[default: 0]
--checkers <CHECKERS>
KE-A2: Concurrency cap for metadata-only operations during sync (rclone `--checkers`). Default `8`, range 1-64. NOTE: today this only bounds and labels the `--no-traverse` stat sweep, which still runs sequentially: `StorageProvider::stat` takes `&mut self`, so a single provider handle serialises the probes. The value is honoured semantically (reported in the sweep's summary note) but does not yet parallelise anything; it becomes a real concurrency gate with the provider pool refactor (Sprint K2). Distinct from `--transfers`, which caps the actual data-transfer pool
[default: 8]
--sftp-concurrency <SFTP_CONCURRENCY>
KE-A1: SFTP-specific concurrency override for single-file downloads (rclone `--sftp-concurrency`). When set and the remote is SFTP, takes precedence over `--multi-thread-streams` for SFTP only. Default `0` = follow `--multi-thread-streams`. Range 1-16.
IMPORTANT: AeroFTP implements SFTP "concurrency" as N independent SSH connections (PD-SFTP-1 / PD-SFTP-2 pattern), NOT as N pipelined SSH_FXP_READ on a single channel like rclone. The semantics differ: AeroFTP pays N handshakes once per transfer and gets fully independent streams (incl. on servers that ignore SSH window scaling); rclone uses a single channel with deeper read queue depth (lower handshake cost, bounded by server window-scaling honesty). On 1 Gbit links to modern OpenSSH the two converge within ~5%; on links with degraded window scaling AeroFTP's N-connections wins. Reads default from `AEROFTP_SFTP_CONCURRENCY`.
[env: AEROFTP_SFTP_CONCURRENCY=]
[default: 0]
--s3-upload-concurrency <S3_UPLOAD_CONCURRENCY>
KE-B1.1: Override S3 multipart upload parallelism (rclone `--s3-upload-concurrency`). Caps how many parts are uploaded concurrently per file. Default `0` = use the built-in 4-in-flight ceiling. Range 1-64. Memory usage scales with `--s3-upload-concurrency * <part-size>`; raising both at once on small VMs can OOM. Silently ignored when the remote is not S3
[env: AEROFTP_S3_UPLOAD_CONCURRENCY=]
[default: 0]
--s3-no-check-bucket
KE-B1.2: Skip the S3 bucket-existence probe on `connect()` (rclone `--s3-no-check-bucket`). Use with IAM credentials that grant `PutObject` but deny `ListBucket`: the default probe would 403 even though uploads work. Silently ignored when the remote is not S3
[env: AEROFTP_S3_NO_CHECK_BUCKET=]
--s3-disable-checksum
KE-B1.3: Replace the per-payload SHA-256 in S3 SigV4 with `UNSIGNED-PAYLOAD` (rclone `--s3-disable-checksum`). Reduces client CPU on large multipart uploads (~5-15% on a CPU-bound producer) at the cost of SigV4 in-flight tamper protection. Empty-body requests still hash normally (constant cost, some gateways require it). Silently ignored when the remote is not S3
[env: AEROFTP_S3_DISABLE_CHECKSUM=]
--s3-acl <S3_ACL>
KE-B1.4: Canned ACL applied to S3 uploads (rclone `--s3-acl`). Common values: `private`, `public-read`, `public-read-write`, `authenticated-read`, `bucket-owner-read`, `bucket-owner-full-control`. Emitted as `x-amz-acl`. Validation is permissive (vendor extensions accepted; AWS rejects unknown values at the API level). Silently ignored when the remote is not S3, or when the bucket is governed by a bucket policy that forbids ACLs (AWS default since April 2023). Reads default from `AEROFTP_S3_ACL`
[env: AEROFTP_S3_ACL=]
--s3-storage-class <S3_STORAGE_CLASS>
KE-B1.5: Storage class for S3 uploads (rclone `--s3-storage-class`). Common AWS values: `STANDARD`, `STANDARD_IA`, `ONEZONE_IA`, `INTELLIGENT_TIERING`, `GLACIER_IR`, `GLACIER`, `DEEP_ARCHIVE`, `REDUCED_REDUNDANCY`, `EXPRESS_ONEZONE`. Vendor-specific tiers (B2 / Wasabi / R2) accepted. Takes precedence over the profile-level `storage_class` setting. Emitted as `x-amz-storage-class`. Silently ignored when the remote is not S3. Reads default from `AEROFTP_S3_STORAGE_CLASS`
[env: AEROFTP_S3_STORAGE_CLASS=]
--onedrive-no-versions
KE-B3.1: After every successful OneDrive upload, sweep all previous versions of the resulting drive item (rclone `--onedrive-no-versions`). Mitigates the OneDrive Personal "quota inflation from auto-versioning" issue where every modify spawns a new version that counts against the user's storage quota. The sweep is best-effort: failures are logged but never propagated, so the upload itself still reports success. Silently ignored when the remote is not OneDrive
[env: AEROFTP_ONEDRIVE_NO_VERSIONS=]
--onedrive-list-chunk <ONEDRIVE_LIST_CHUNK>
KE-B3.2: Override the Microsoft Graph `$top` paging size for `/children` listings (rclone `--onedrive-list-chunk`). Server default is ~200. Bigger pages reduce round trips on large folders; smaller pages help under throttling. Clamped to `[1, 999]`. `0` = leave server default. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LIST_CHUNK`
[env: AEROFTP_ONEDRIVE_LIST_CHUNK=]
[default: 0]
--onedrive-link-scope <ONEDRIVE_LINK_SCOPE>
KE-B3.3: Override the share-link `scope` on `createLink` calls (rclone `--onedrive-link-scope`). Typical values: `anonymous` (default), `organization`, `users`. Validation is permissive; the Graph API rejects unknown scopes at request time. Silently ignored when the remote is not OneDrive. Reads default from `AEROFTP_ONEDRIVE_LINK_SCOPE`
[env: AEROFTP_ONEDRIVE_LINK_SCOPE=]
--azure-upload-concurrency <AZURE_UPLOAD_CONCURRENCY>
KE-B4.1: Override the number of `Put Block` requests in flight during Azure block uploads (rclone `--azureblob-upload-concurrency`). Default `0` = serial (1 block at a time, historical behaviour). Range 1-32. Memory usage scales with `concurrency * 4 MiB` per upload; raising on small VMs can OOM. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_UPLOAD_CONCURRENCY=]
[default: 0]
--azure-disable-checksum
KE-B4.2: Reserved for future Content-MD5 metadata gating on Azure uploads (rclone `--azureblob-disable-checksum`). AeroFTP does not currently send `x-ms-blob-content-md5` on uploads, so this flag is structurally wired but has no observable effect today. It will gate the future MD5-on-upload code path once that lands. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_DISABLE_CHECKSUM=]
--azure-access-tier <AZURE_ACCESS_TIER>
KE-B4.3: Apply this Azure access tier to every successful upload as a post-PUT `Set Blob Tier` call (rclone `--azureblob-access-tier`). Values: `Hot`, `Cool`, `Cold`, `Archive`. Tier failures are logged at WARN but do not invalidate the upload itself. Vendor / future tiers pass through; Azure rejects unknown values at the API level. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ACCESS_TIER=]
--azure-archive-tier-delete
KE-B4.4: Before overwriting an existing blob, check if it is in Archive access tier; if so, DELETE the blob before the new PUT (rclone `--azureblob-archive-tier-delete`). Without this flag, PUT against an Archive blob fails with `BlobArchived`. Adds one pre-upload HEAD round trip per file. Silently ignored when the remote is not Azure Blob
[env: AEROFTP_AZURE_ARCHIVE_TIER_DELETE=]
--drive-cross-account-copy
KE-B2.3: Append `supportsAllDrives=true` to Google Drive `files.copy` so the server-side copy succeeds across Shared Drives and between My Drive and a Shared Drive. Without this flag, copies that cross drive boundaries can fail with 404 / 403 even when the OAuth scopes are sufficient. Aligned with rclone's `--drive-server-side-across-configs`. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_CROSS_ACCOUNT_COPY=]
--drive-pacer-burst <DRIVE_PACER_BURST>
KE-B2.1: Allow this many Google Drive API dispatches inside one AIMD pacing window before `--drive-pacer-min-sleep` is applied. `0` preserves the controller default. Ignored for non-Drive providers
[env: AEROFTP_DRIVE_PACER_BURST=]
[default: 0]
--drive-pacer-min-sleep <DRIVE_PACER_MIN_SLEEP>
KE-B2.2: Minimum delay between Google Drive AIMD API pacing windows. Accepts `500ms`, `2s`, `1m`, `1h`, or `0` to disable the overlay and preserve the controller default
[env: AEROFTP_DRIVE_PACER_MIN_SLEEP=]
--drive-acknowledge-abuse
KE-B2.4: Append `acknowledgeAbuse=true` to Google Drive binary download URLs (`alt=media`) so files flagged by Google as abusive still download instead of failing with `cannotDownloadAbusiveFile` (rclone `--drive-acknowledge-abuse`). Workspace export endpoints are not affected. By enabling this flag the user acknowledges the risk associated with downloading content Google's classifier flagged. Silently ignored when the remote is not Google Drive
[env: AEROFTP_DRIVE_ACKNOWLEDGE_ABUSE=]
--aimd-hint <AIMD_HINT>
KE-D3: Static Retry-After fallback overlay for the AIMD controller. Repeat as `--aimd-hint=provider:secs`, for example `--aimd-hint=drive:30 --aimd-hint=s3:5`
[env: AEROFTP_AIMD_HINT=]
--aimd-disable
KE-D1: Disable the AIMD backpressure controller for the whole run. When set, dispatch concurrency stays pinned at the honest per-class ceiling: a 429 / 503 / timeout response no longer halves the window and a healthy completion no longer regrows it. Intended for dedicated/lab links where the operator has out-of-band guarantees the backend will not throttle and AIMD would only mask a genuine throughput cap diagnostic
[env: AEROFTP_AIMD_DISABLE=]
--aimd-min-window <AIMD_MIN_WINDOW>
KE-D2: Floor for the AIMD `target` after multiplicative decrease. Broadcast to every controlled class (file / chunk / http / api). Use the TOML file (`--aimd-config`) for per-class overrides. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_MIN_WINDOW=]
--aimd-max-window <AIMD_MAX_WINDOW>
KE-D2: Ceiling cap for the AIMD `target`. Broadcast to every controlled class. The value clamps the budget-derived ceiling from below: it can only shrink the honest cap, never raise it (AIMD is decrease-biased). Default: `ceiling` (no extra clamp)
[env: AEROFTP_AIMD_MAX_WINDOW=]
--aimd-step-window <AIMD_STEP_WINDOW>
KE-D2: Additive step applied to the AIMD `target` once per quiet `healthy_window`. Broadcast to every controlled class. A value of `0` is sanitized to `1`. Default: `1`
[env: AEROFTP_AIMD_STEP_WINDOW=]
--aimd-config <PATH>
KE-D2: Path to a TOML file with per-class AIMD window overrides. When unset, AeroFTP looks at `$XDG_CONFIG_HOME/aeroftp/aimd.toml` (or `~/.config/aeroftp/aimd.toml`) and loads it silently if it exists. CLI broadcast flags (`--aimd-min-window`, etc.) take precedence over file values per class.
File schema: [aimd.file] min = 1 max = 8 step = 2 [aimd.chunk] min = 4 max = 32 [aimd.http] ... [aimd.api] ... Every section and every key is optional.
[env: AEROFTP_AIMD_CONFIG=]
-h, --help
Print help (see a summary with '-h')
Output options:
--format <FORMAT>
Output format
[default: text]
[possible values: text, json]
--json
Shorthand for --format json
--machine
Machine / agent mode (implies --json --no-banner --quiet). Guarantees that stdout contains *only* structured result data. All human diagnostics, "Using profile", path notes, connection chatter, "Connected successfully", "Next: ..." etc. go to stderr (or are suppressed). This is the recommended flag for robust agent/LLM/tool-calling use. (also via AEROFTP_MACHINE env var)
--no-banner
Suppress the startup banner (also via AEROFTP_NO_BANNER env var)
--json-fields <JSON_FIELDS>
Restrict JSON output fields (comma-separated, e.g. name,size,modified)
-v, --verbose...
Verbose output (-v debug, -vv trace)
-q, --quiet
Quiet mode (errors only)
Connection options:
--password-stdin
Read password from stdin (pipe: echo "pass" | aeroftp ...)
--key <KEY>
SSH private key path for SFTP
--key-passphrase <KEY_PASSPHRASE>
SSH key passphrase
--bucket <BUCKET>
S3 bucket name
--region <REGION>
S3/Azure region
--container <CONTAINER>
Azure container name
--token <TOKEN>
Bearer/API token (kDrive, Jottacloud, FileLu)
[env: AEROFTP_TOKEN]
--tls <TLS>
FTP TLS mode: none, explicit, implicit, explicit_if_available
--insecure
Skip TLS certificate verification
--trust-host-key
Trust unknown SSH host keys (skip TOFU verification)
--two-factor <TWO_FACTOR>
2FA code (Filen, Internxt)
[env: AEROFTP_2FA]
--no-crypt
Connect to a crypt-overlay profile RAW (skip the bound Crypt overlay), mirroring the GUI's Crypt On/Off toggle. On-wire names and content stay encrypted; no decrypt/encrypt is applied. Ignored for non-crypt profiles
Safety options:
--strict
Refuse safety-relaxing flags (also via AEROFTP_STRICT=1).
Hardens unattended / agent automation: any flag that disables a safety check (TLS or SSH host-key verification, the abuse / cross-account / archive-tier acknowledgements, AIMD backpressure) or auto-approves write/destructive agent tools becomes a hard error (exit 5) instead of silently relaxing safety. A generated command that smuggles in `--insecure` or `--auto-approve all` then fails loudly rather than proceeding.
To install the app on your iPhone/iPad: